mysql 动态搜索查询索引

mysql Dynamic search query indexing

这是我的第一个项目,所以很抱歉我有很多问题。

我正在尝试索引以搜索上面的 Cat table。

但是,我不知道如何应用它,因为where子句有多个case。

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;

如果是这样,我可以分别创建年龄、姓名和出生的索引吗? 如果不是,我是否必须为每种情况创建 (age)、(age,name)、(age,birth)、(age,name,birth)...?

看了书也不是很清楚,所以留个问题。我希望你不要为此感到难过。

我使用 mysql v8.0 innoDB。

谢谢!

WHERE birth between '2000-01-01' and '2009-12-31'

可能得到

的帮助
INDEX(birth)

但是请注意:如果 birthDATETIME 类型,则您遗漏了大部分 12/31。

and NAME like '%blue%';

由于 leading 通配符,任何索引都无济于事。

AND AGE = 5

架构设计不好。想一想当猫过生日时会发生什么。您必须更新该列。而是用 birthCURDATE().

做一些日期运算

但如果您确实保留了 age 列,那么这个 可能 有帮助:

INDEX(age)

我今天在另一个问题中讨论了 cat.birth 个查询;看见。有关如何为给定 SELECT 构建合适索引的更多讨论,请参阅我的 Index Cookbook。它显示了 WHERE ... AND ... 的哪些情况可以使用“复合”(multi-column)INDEX 来获得良好的优势。 None 您的示例可以使用复合索引。