索引能否傷害?這是我的整個問題。我很好奇。在SQL中,索引是否有害?
回答
查詢優化器將簡單地忽略與查詢無關的索引。但是在查詢優化期間,他們仍然需要花費幾微秒,考慮是否應該使用每個索引。
你在一個表上的索引越多,越複雜,優化的工作分析是用最好的一個。在極少數情況下,優化階段實際上可能比查詢執行成本更高。
我曾在最近幫助使用MySQL 5.6客戶端,其中一些新的複雜的查詢優化功能,導致查詢優化過程中使用100%CPU的情況。基本上,它使優化器估計了成千上萬的指數選擇排列的好處,就像一個展望未來幾步棋的象棋遊戲程序。
爲了解決這個問題,我們有效地改變了一些配置變量來使MySQL 5.6的優化器跳過了新的功能,並阿瓜約最優的索引選擇,就像是在MySQL 5.5。這解決了這種情況下的CPU高峯問題。
這種情況是例外,因爲查詢非常複雜,並且他們有很多索引。
這種情況也是非常具體的一個品牌RDBMS中的一個版本。但其他品牌的數據庫可能有類似的邊緣情況。
這很有道理。謝謝。 – japem
是的,索引可能會受到傷害。首先,在插入,更新和刪除操作期間維護索引時會有開銷。這種開銷可能是有害的,特別是在高容量交易環境中。
索引也可能被錯誤地使用。例如,下面的查詢可以是相當難優化:
select t.*
from table t
where col1 > 'x'
order by col2
的時候有兩個指標,一個是關於col1
,另一個在col2
。
一種方法是使用col1
索引取所有適當的行。然後使用order by
進行排序。另一種方法是使用col2
索引進行排序,然後一次過濾一行。
哪種方法更好取決於數據,優化程序可能很難做出正確的決定。這是第二個索引可能意味着錯誤索引用於優化的情況。
一般情況下,指數確實與查詢優化和許多系統幫助,維護他們的額外開銷可以忽略不計。但是,這並不意味着他們總是有幫助的。
- 1. AJAX加載是否會傷害搜索引擎優化?
- 2. MSSQL:last_user_update是否意味着索引損害了性能?
- 3. 截斷錨文本是否會傷害搜索引擎優化?
- 4. 是否有查詢索引?
- 5. 索引是否有reflog?
- 6. SQL Server是否支持散列索引?
- 7. 是否對外部http請求有害?
- 8. Elasticsearch中的索引和索引之間是否有區別?
- 9. MySQL是否在創建新索引時使用現有索引?
- 10. 複合索引:列的順序是否在sql server/linq到sql?
- 11. PHP - 檢查索引是否已經存在於SQL中
- 12. 外鍵是否在SQL Server中自動索引?
- 13. SQL Server 2008中檢查是否存在索引
- 14. NATURAL(JOIN)在生產環境中是否有害?
- 15. 是url.openStream有害嗎?
- 16. 是否有可能在MySQL中有索引視圖?
- 17. 檢查WebSQL中是否存在索引
- 18. 在addView()中索引是否重要?
- 19. 主鍵(> 1列)上的索引(1列)是否有用? (SQL)
- 20. Sybase在執行計劃中是否有索引查找操作(如SQL Server)?
- 21. 是否有必要在主鍵列上具有PRIMARY索引和colname索引?
- 22. 檢查當前頁面是否是索引中的索引
- 23. 我的MySQL索引是否有效?
- 24. 位圖索引是否有用
- 25. Oracle是否有過濾索引概念?
- 26. 是否有從索引數組
- 27. postgreSQL索引是否有多值字段?
- 28. 索引創建是否可以使用現有索引?
- 29. 是否有一個好的Node.js索引/搜索引擎?
- 30. 是否使包含另一個索引的索引有意義?
你會考慮次優的有害嗎? –
是的。任何不利的東西。 – japem
應該在數據庫中仔細考慮索引的類型和數量。索引可能非常大,因此空間成爲考慮因素。 – paqogomez