Maison  >  Questions et réponses  >  le corps du texte

Index disponible mais toujours pas utilisé - MySQL

Nous avons créé un index spécifiquement pour une requête mais j'ai constaté que l'exécution de la requête prend 5 à 6 secondes. J'ai essayé d'obtenir l'index inutilisé à l'aide de la requête suivante et j'ai remarqué que l'index est répertorié dans la liste des index inutilisés. Veuillez suggérer comment obtenir de meilleures performances pour la requête suivante.

Requête clause Where : 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;

Index inutilisés : SELECT * FROM sys.schema_unused_indexes;

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

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

Expliquez la requête :

Clés possibles : idx_jobs_feed_parsedjobdescription_is_updated, idx_is_updated

Clé : idx_jobs_feed_parsedjobdescription_is_updated

Longueur de clé : 703

Nombre de lignes : 1

🎜Filtré : 50,0🎜
P粉668019339P粉668019339184 Il y a quelques jours360

répondre à tous(1)je répondrai

  • P粉232793765

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

    Trois choses à éviter en utilisant deux colonnes indexées :

    • N'EST PAS NULL - Une fois la plage atteinte, les colonnes restantes ne seront pas utilisées.

    • is_updated != 0 -- C'est aussi une "plage".

    • Il y a un problème avec le préfixe d'index.

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

    Si le test est is_updated = 1, vous pouvez retourner l'index (ou ajouter un autre index) :

    INDEX(is_updated, parsedjobdescription(100))

    répondre
    0
  • Annulerrépondre