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)
但是请注意:如果 birth
是 DATETIME
类型,则您遗漏了大部分 12/31。
and NAME like '%blue%';
由于 leading 通配符,任何索引都无济于事。
AND AGE = 5
架构设计不好。想一想当猫过生日时会发生什么。您必须更新该列。而是用 birth
和 CURDATE()
.
做一些日期运算
但如果您确实保留了 age
列,那么这个 可能 有帮助:
INDEX(age)
我今天在另一个问题中讨论了 cat.birth
个查询;看见。有关如何为给定 SELECT
构建合适索引的更多讨论,请参阅我的 Index Cookbook。它显示了 WHERE ... AND ...
的哪些情况可以使用“复合”(multi-column)INDEX
来获得良好的优势。 None 您的示例可以使用复合索引。
这是我的第一个项目,所以很抱歉我有很多问题。
我正在尝试索引以搜索上面的 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)
但是请注意:如果 birth
是 DATETIME
类型,则您遗漏了大部分 12/31。
and NAME like '%blue%';
由于 leading 通配符,任何索引都无济于事。
AND AGE = 5
架构设计不好。想一想当猫过生日时会发生什么。您必须更新该列。而是用 birth
和 CURDATE()
.
但如果您确实保留了 age
列,那么这个 可能 有帮助:
INDEX(age)
我今天在另一个问题中讨论了 cat.birth
个查询;看见。有关如何为给定 SELECT
构建合适索引的更多讨论,请参阅我的 Index Cookbook。它显示了 WHERE ... AND ...
的哪些情况可以使用“复合”(multi-column)INDEX
来获得良好的优势。 None 您的示例可以使用复合索引。