應該是一個非常簡單的問題。我可以將一個INDEX添加到公用表表達式(CTE)嗎?向CTE添加索引
向CTE添加索引
回答
號
甲CTE是一個臨時的,「內聯」視圖 - 你不能索引添加到這樣的構建體。
如果您需要索引,請使用CTE的SELECT創建常規視圖,並將其設置爲索引視圖(通過將聚集索引添加到視圖中)。您需要遵守這裏列出的一組規則:Creating an Indexed View。
謝謝。我不確定Binging是什麼也沒有顯示,Googl也沒有。 – 2010-10-22 11:29:44
Lycos-ing怎麼樣? – 2013-03-06 22:30:54
對我來說,索引視圖首先嚐試18秒,然後16秒,然後14秒第三次嘗試。 CTE首先嚐試了16秒。我會堅持CTE。順便說一句,對於我索引表(暫時使用)是最好的整體下降到10秒。 – Todd 2017-03-28 11:58:27
我有同樣的要求。索引不能添加到CTE。但是,在CTE中,選擇在連接字段上添加ORDER BY子句將執行時間從20分鐘或更長時間減少到10秒以下。
(您還需要添加SELECT TOP 100%,至允許ORDER BY的CTE選擇。)
[編輯從註釋下添加轉述報價]:
如果你有不同之處在CTE然後TOP 100 PERCENT不起作用。這種騙子方法總是可用的:在選擇時不需要TOP,將ORDER BY語句改爲:
ORDER BY [Blah] OFFSET 0 ROWS
你從哪裏學到這樣的伏都教?它對我們有長時間運行的查詢有顯着的影響。前100,000比PERCENT 100的效果更好。我將開始深入查詢分析器,看看發生了什麼。謝謝! – BlackjacketMack 2012-09-08 01:35:05
這是非常有趣,很好知道。我將我的查詢從最高1000000改爲最高100 PERCENT。我會改回它。在嘗試爲CTE建立索引時,我在MSDN上遇到了這個提示。 – 2012-09-08 05:14:15
TOP 100 PERCENT可能會使用估計記錄數返回。 TOP 1000000可能會認爲會有更多的內存並預留更多的內存,以便沒有排序警告和泄漏到TempDB。 – milivojeviCH 2012-10-22 10:17:32
@BH - 解決使用TOP的DISTINCT問題100%或TOP 1000000,你總是可以使用GROUP BY。實現相同的目的,有時比DISTINCT更快。
- 1. 如何向索引添加索引
- 2. 向多維數組添加新索引
- 3. 向列表添加索引的目的
- 4. mysql索引添加
- 5. 添加SQL索引
- 6. 通過索引向向量添加值 - 提高速度
- 7. 向URL添加空格會重定向到搜索引擎
- 8. 數組:向索引5添加數字並向右推
- 9. TCL foreach正在向我的索引添加引號
- 10. Laravel - 遷移(向表中添加索引會引發錯誤)
- 11. 手動向SharePoint搜索索引添加項目
- 12. PostgreSQL上的CTE和臨時索引
- 13. Rails:添加列後添加索引
- 14. 添加索引列在MySQL
- 15. jackrabbit添加新索引
- 16. 添加索引(db_index = True)
- 17. 錯誤添加索引到
- 18. 添加索引到表
- 19. 添加到特定索引
- 20. 添加索引gerrund表
- 21. 添加唯一索引。 SQLite3
- 22. 添加索引的表
- 23. 在mogodb中添加索引
- 24. 添加索引以JavaScript
- 25. 要添加哪個索引?
- 26. 索引負向索引的std ::向量
- 27. CTE重複引用
- 28. 防止hibernate向mysql表中添加唯一索引
- 29. 在Joomla的URL處添加WWW而不重定向到索引
- 30. 向SQL Server表添加額外(細化的)索引
這可能是一些可能與一些搞亂計劃指南。 [本文](http://explainextended.com/2009/05/28/generating-xml-in-subqueries/)[Quassnoi](http://stackoverflow.com/users/55159/quassnoi)展示瞭如何使用計劃指南通過向計劃添加EagerSpool來獲取緩存的CTE結果。這會在tempdb中爲它們構建一個臨時索引。 – 2010-10-22 12:08:49
@Martin Smith:哇!我將有一個很好的閱讀,並嘗試讓我的頭圍繞這一切:) – 2010-10-22 12:51:19