這是我的第一個項目,所以很抱歉我有很多問題。
我正在嘗試建立索引來搜尋上面的 Cat 表。
但是,我不知道如何應用它,因為 where 子句有多種情況。
SELECT * FROM CAT WHERE birth between '2000-01-01' and '2009-12-31'; SELECT * FROM CAT WHERE birth between '2000-01-01' and '2009-12-31' and NAME like '%blue%'; SELECT * FROM CAT WHERE NAME like '%blue%' AND AGE = 5;
如果可以,我可以分別建立年齡、姓名和出生的索引嗎? 如果沒有,我是否必須為每種情況創建(年齡),(年齡,姓名),(年齡,出生),(年齡,姓名,出生)......?
即使讀完這本書,我也不確定,所以我留下一個問題。希望你不要為此感到難過。
我使用mysql v8.0 innoDB。
謝謝!
P粉2774647432024-03-31 15:26:09
WHERE birth between '2000-01-01' and '2009-12-31'
可能會得到幫助
INDEX(birth)
但請注意:如果 birth
的類型為 DATETIME
,則您遺漏了 12/31 的大部分內容。
and NAME like '%blue%';
由於前導通配符,任何索引都無濟於事。
AND AGE = 5
架構設計很糟糕。想像一下當貓過生日時會發生什麼事。您必須更新該列。相反,使用 birth
和 CURDATE()
進行一些日期算術。
但是如果您確實保留了 age
列,那麼這可能會有所幫助:
INDEX(age)
我今天在另一個問題中介紹了 cat.birth
查詢;看見。請參閱我的 Index Cookbook 以了解有關如何為給定的 SELECT
建立合適的索引。它顯示了 WHERE ... AND ...
的哪些情況可以使用「複合」(多列)INDEX
來獲得良好的優勢。您的範例都不能使用複合索引。