2016-01-13 3 views
5

L'ajout d'un LIMIT à une requête EXISTS présente-t-il des avantages en termes de performances, ou est-ce que MySQL appliquerait la limite de son propre chef?Tout point dans l'utilisation de LIMIT dans une requête EXISTS?

Exemple:

IF EXISTS (
    SELECT 1 
     FROM my_table 
    LIMIT 1 -- can this improve performance? 
) 
THEN ... END IF; 
+0

ouais ... Cela améliore les performances car vous limitez les enregistrements. –

+0

Avez-vous essayé d'utiliser 'EXPLAIN'? –

+0

@TimBiegeleisen, oui, cela ne semble pas affecté. – shmosel

Répondre

10

Le but de EXISTS() est d'effectuer la requête seulement jusqu'à il peut décider s'il y a des lignes dans cette table correspondant à la clause WHERE. Autrement dit, il fait logiquement la même chose que LIMIT 1. EXISTS est probablement appelé semi-join dans certains cercles.

Ligne de fond: Ne pas utiliser LIMIT 1 à l'intérieur EXISTS().

0

Trifouiller ma requête un peu, je remarquai que EXISTS retourne encore 1 si LIMIT est réglé sur 0. Je suppose que cela signifie qu'il est ignoré.

+0

Je suggère que 'LIMIT 0' est un cas de bord aberrant. –

0

Cela dépend du nombre d'enregistrements dans votre table (table_mon) .Si les enregistrements ne sont pas trop, vous ne verrez aucune amélioration des performances, mais si votre table contient trop d'enregistrements, vous verrez l'amélioration des performances dépend de nombreux facteurs comme vous avez l'index dans la colonne ceux qui sont utilisés dans select (si vous le faites alors vous aurez l'avantage de couvrir l'indice aussi).