我有一個存儲有關50K行,這裏是我的查詢表:在mysql中使用where子句時,我應該使用索引嗎?
select * from video where status = 1 and filter = 1 and category = 4
這些列TINYINT而且我不知道我應該在這些列上做索引?
我有一個存儲有關50K行,這裏是我的查詢表:在mysql中使用where子句時,我應該使用索引嗎?
select * from video where status = 1 and filter = 1 and category = 4
這些列TINYINT而且我不知道我應該在這些列上做索引?
不!
您應該始終考慮索引選擇性!如果索引上的where子句的結果將返回超過表的20%,那麼該索引不會被使用,但會被忽略。
因此,例如,您的視頻的狀態將是1,2,3,那麼你有3個可能的狀態。如果這些指數分佈均勻,我們可以認爲其中有33.3%是適合的。隨後,查詢:
select * from video where status = 1
將不使用索引!相反,將使用FULL TABLE SCAN。
請仔細閱讀。這真的很重要,也是一個常見的錯誤。
我肯定會使用索引。他們使選擇更快。但是如果有很多插入表格的話,我會再想一想。插入語句上的索引會增加很多重載,並且插入語句會很慢,因爲每次插入時都必須重新構造索引。
如果您創建此查詢的索引,試圖(status, filter, category)
(順序可能會有所不同)。
但這取決於您的表格行的百分比是多少。最小的百分比,您的查詢將使用索引運行得越好。正如santiagobasulto指出的那樣,如果索引選擇性不高,那麼索引將不會用於查詢,但會對錶進行全面掃描。