这是我的第一个项目,所以很抱歉我有很多问题。
我正在尝试建立索引来搜索上面的 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
来获得良好的优势。您的示例都不能使用复合索引。