Heim  >  Fragen und Antworten  >  Hauptteil

Indizierung dynamischer Suchanfragen auf Basis von MySQL

Dies ist mein erstes Projekt, daher tut es mir leid, dass ich viele Fragen habe.

Ich versuche, einen Index zu erstellen, um die obige Cat-Tabelle zu durchsuchen.

Allerdings weiß ich nicht, wie ich es anwenden soll, da es mehrere Fälle für die Where-Klausel gibt.

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;

Kann ich nach Möglichkeit separate Verzeichnisse für Alter, Name und Geburt erstellen? Wenn nicht, muss ich für jeden Fall (Alter), (Alter, Name), (Alter, Geburt), (Alter, Name, Geburt) ... erstellen?

Selbst nachdem ich das Buch gelesen habe, bin ich mir nicht sicher, also stelle ich Ihnen eine Frage. Ich hoffe, du hast kein schlechtes Gewissen deswegen.

Ich verwende MySQL v8.0 innoDB.

Danke!

P粉170438285P粉170438285184 Tage vor310

Antworte allen(1)Ich werde antworten

  • 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 来获得良好的优势。您的示例都不能使用复合索引。

    Antwort
    0
  • StornierenAntwort