首頁  >  問答  >  主體

基於MySQL的動態搜尋查詢索引化

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

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

全部回覆(1)我來回復

  • P粉277464743

    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

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

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

    INDEX(age)

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

    回覆
    0
  • 取消回覆