基于MySQL的动态搜索查询索引化
P粉170438285
P粉170438285 2024-03-30 20:21:47
0
1
299

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

我正在尝试建立索引来搜索上面的 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粉170438285
P粉170438285

全部回复(1)
P粉277464743
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 来获得良好的优势。您的示例都不能使用复合索引。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!