Heim  >  Fragen und Antworten  >  Hauptteil

Index verfügbar, aber noch nicht verwendet – MySQL

Wir haben einen Index speziell für eine Abfrage erstellt, aber ich habe festgestellt, dass die Ausführung der Abfrage 5 bis 6 Sekunden dauert. Ich habe versucht, den nicht verwendeten Index mithilfe der folgenden Abfrage abzurufen, und habe festgestellt, dass der Index in der Liste der nicht verwendeten Indexe aufgeführt ist. Bitte schlagen Sie vor, wie Sie eine bessere Leistung für die folgende Abfrage erzielen können.

Where-Klausel abfragen: WHERE parsedjobdescription IS NOT NULL AND is_updated != 0

Index: KEYidx_jobs_feed_parsedjobdescription_is_updated((parsedjobdescription(700),is_updated)parsedjobdescription(700),

is_updated)

SELECT * FROM sys.schema_unused_indexes;

Unbenutzte Indizes: SELECT * FROM sys.schema_unused_indexes;

parsedjobdescription varchar(50000) DEFAULT NULL is_updated tinyint(1) DEFAULT '0'

Spalte: parsedjobdescription varchar(50000) DEFAULT NULL is_updated tinyint(1) DEFAULT '0'

Abfrage erklären:

Mögliche Schlüssel: idx_jobs_feed_parsedjobdescription_is_updated, idx_is_updated

Schlüssel: idx_jobs_feed_parsedjobdescription_is_updated

Schlüssellänge: 703

Anzahl der Zeilen: 1

🎜Gefiltert: 50,0🎜
P粉668019339P粉668019339184 Tage vor363

Antworte allen(1)Ich werde antworten

  • P粉232793765

    P粉2327937652024-04-01 09:01:20

    禁止使用索引的两列的三件事:

    • IS NOT NULL - 一旦达到范围,其余列将不会被使用。

    • is_updated != 0 -- 这也是一个“范围”。

    • 索引前缀有问题。

      INDEX(parsedjobdescription(700), ...  -- won't get past that prefix to use anything after it.

    如果测试是 is_updated = 1,您可以翻转索引(或添加另一个索引):

    INDEX(is_updated, parsedjobdescription(100))

    Antwort
    0
  • StornierenAntwort