首页  >  问答  >  正文

基于MySQL的动态搜索查询索引化

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

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

全部回复(1)我来回复

  • P粉277464743

    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

    架构设计很糟糕。想象一下当猫过生日时会发生什么。您必须更新该列。相反,使用 birthCURDATE() 进行一些日期算术。

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

    INDEX(age)

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

    回复
    0
  • 取消回复