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