Mysql
更好地理解表索引最佳實踐
當有一些我應該考慮的標準時,我不完全確定我什麼時候開始索引我的表:
- 我認為這些表並不大(1000 - 10,000 行)。
- 搜尋是從 CMS 管理頁面進行的 - 因此它們包括比前端更多類型的過濾/排序選項/組合。
- 我想知道是否存在過度索引之類的問題,我會在其中添加太多索引以使搜尋更快,但它會對向表中插入/更新數據或數據庫引擎的性能產生巨大影響將為查詢選擇錯誤的索引。
Fulltext
當涉及到文本搜尋時,我正在添加索引。- 我還添加了 asc/desc 索引,
DATETIME/INT/BIGINT
因為我相信在基於列的排序/過濾方面會提供更好的性能。當我考慮到上述參數以及我傾向於成為“索引納粹”(請原諒我的法語)時,我只是不確定添加索引將提高我的應用程序性能的最佳點是什麼 -我發現自己為我能想到的每一種可能的情況添加了越來越多的索引。
我確實希望這個問題不要太寬泛,並且我沒有提供範例,因為它是索引時好的和壞做法的更普遍的行為。
不要隨意添加索引。查看您的查詢以確定需要哪些索引。看我的食譜。
InnoDB 真的需要一個
PRIMARY KEY
. 請記住,PK 是、索引、是UNIQUE
、並且是集群的。所以不要添加任何以相同列開頭的索引。
WHERE a=2 AND b=4
乞求“複合”索引:INDEX(a,b)
或INDEX(b,a)
. 這些不同於兩個單獨的索引:INDEX(a), INDEX(b)
.
BIGINT
除非你真的期望有大量的數字,否則不要使用。
DESC``INDEX
在聲明中被忽略。但是,這並不能阻止優化器以相反的順序執行索引以產生“降序”的效果。
FULLTEXT
僅當您使用MATCH(...) AGAINST(...)
.“太多”索引會減慢一些插入速度,並減慢
UPDATEs
更改索引列的速度。不要索引“標誌”;這樣的索引將“永遠”不會被使用。