基於MySQL的動態搜尋查詢索引化
P粉170438285
P粉170438285 2024-03-30 20:21:47
0
1
304

這是我的第一個項目,所以很抱歉我有很多問題。

我正在嘗試建立索引來搜尋上面的 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粉170438285
P粉170438285

全部回覆(1)
P粉277464743
WHERE birth between '2000-01-01' and '2009-12-31'

可能會得到幫助

INDEX(birth)

但請注意:如果 birth 的類型為 DATETIME,則您遺漏了 12/31 的大部分內容。

and NAME like '%blue%';

由於前導通配符,任何索引都無濟於事。

AND AGE = 5

架構設計很糟糕。想像一下當貓過生日時會發生什麼事。您必須更新該列。相反,使用 birthCURDATE() 進行一些日期算術。

但是如果您確實保留了 age 列,那麼這可能會有所幫助:

INDEX(age)

我今天在另一個問題中介紹了 cat.birth 查詢;看見。請參閱我的 Index Cookbook 以了解有關如何為給定的 SELECT 建立合適的索引。它顯示了 WHERE ... AND ... 的哪些情況可以使用「複合」(多列)INDEX 來獲得良好的優勢。您的範例都不能使用複合索引。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!