2009-10-07 11 views
2

Supposons que je souhaite interroger une table basée sur plusieurs clauses WHERE.Est-ce que l'ordre des instructions booléennes fait une différence de performance dans une requête MySQL?

L'une de ces instructions serait-elle plus rapide que l'autre?

SELECT * 
    FROM table 
    WHERE (line_type='section_intro' OR line_type='question') 
    AND (line_order BETWEEN 0 AND 12) 
ORDER BY line_order"; 

... ou:

SELECT * 
    FROM table 
    WHERE (line_order BETWEEN 0 AND 12) 
    AND (line_type='section_intro' OR line_type='question') 
ORDER BY line_order; 

je suppose que ce qu'il descendrait à savoir si le premier choisirait plus de 12 dossiers, puis élaguer à partir de là.

Répondre

2

Non, la commande n'a pas d'importance. L'optimiseur de requêtes va estimer toutes les conditions séparément et décider du meilleur ordre en fonction des index applicables/de la taille de la sélection ciblée/etc ...

+0

Excellent, c'est ce que je pensais, mais genre de pensé qu'il serait bon de savoir pour référence future. Merci! – javanix

0

Cela dépend de vos index. Si vous avez un multi-index sur (line_type, line_order), la première requête est plus rapide. Si vous avez un index sur (line_order, line_type), le second est plus rapide. En effet, pour les clés primaires multi-colonnes, MySQL ne peut faire que des comparaisons dans l'ordre. Sinon, il n'y a pas de différence.

HTH -

Chris

+0

Ceci est incorrect. Les deux requêtes vont être exactement les mêmes sur les deux index; lequel des ** index ** rendra les requêtes plus rapides dépend du nombre de lignes correspondantes dans la table/index. Par exemple, si toutes les lignes (ou la grande majorité) des lignes de la table ont 'line_type' comme 'section_intro' ou' question', l'index défini sur (line_type, line_order) ne sera pas utilisé du tout. – ChssPly76

Questions connexes