Question

Si j'ai une requête semblable à,

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'

est-ce que la colonne datetime_field contient une aide indexée? c’est-à-dire que l’indice n’est utile que lorsqu’on utilise le test d’égalité (ou d’inégalité), ou est-il utile lorsqu’une comparaison ordonnée est également effectuée?

  

(Les suggestions pour une meilleure exécution de cette requête, sans recréer la table, seraient également acceptables!)

Était-ce utile?

La solution

Peut-être. En général, s’il existe un tel indice, il utilisera un balayage de plage sur cet index s’il n’existe pas de "meilleur" index sur la requête. Cependant, si l'optimiseur décide que la plage finira par être trop grande (c'est-à-dire qu'il ne doit pas contenir plus d'un tiers des lignes, par exemple), il n'utilisera probablement pas l'index du tout, car un balayage de table serait susceptible d'être plus vite.

Utilisez EXPLAIN (sur un SELECT; vous ne pouvez pas EXPLAINER une suppression) pour déterminer sa décision dans un cas spécifique. Cela dépendra probablement de

  • Combien de lignes y a-t-il dans la table
  • Quelle est la plage que vous spécifiez
  • Quoi d'autre est spécifié dans la clause WHERE. Il n’utilisera pas l’analyse de la plage d’un index s’il existe un autre index qui "a l’air meilleur".

Autres conseils

De Manuel de référence de MySQL :

  

Vous pouvez utiliser un index B-tree pour les comparaisons de colonnes dans les expressions utilisant les opérateurs =, > ;, =,, ,

.

Pour un grand nombre de lignes, il peut être beaucoup plus rapide de rechercher les lignes via un index d'arborescence plutôt que via une analyse de table. Mais comme le soulignent les autres réponses, utilisez EXPLAIN pour connaître la décision de MySQL.

Un index sur le champ date / heure aidera certainement avec les recherches basées sur une plage de dates. Nous les utilisons tout le temps dans nos bases de données et les requêtes sont extrêmement lentes sans les index.

Si, vérifiez avec une table DESCRIBE SELECT FROM ...

Sauf que vous n'avez pas ce bogue dans mysql http: //bugs.mysql. com / bug.php? id = 58190

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top