MySQL n'optimise pas encore quand vous effectuez des recherches
sur deux clefs différentes combinées avec
OR
(la recherche sur une clef avec
différentes parties OR
est elle pas mal
optimisée) :
SELECT champ1_index, champ2_index FROM test_table WHERE champ1_index = '1' OR champ2_index = '1'
La raison est que nous n'avons pas trouvé le temps suffisant
pour parvenir à un moyen efficace de gérer cela dans un cas
général. (En comparaison, la gestion de AND
est maintenant complètement générale et fonctionne très
bien.)
En MySQL 4.0, vous pouvez résoudre ce problème efficacement en
utilisant une clause UNION
qui combine le
résultat de deux requêtes SELECT
séparée.s See Section 13.1.7.2, « Syntaxe de UNION
». Chaque requête
SELECT
ne recherche qu'avec une seule clé,
et peut être optimisée :
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' UNION SELECT field1_index, field2_index FROM test_table WHERE field2_index = '1';
Avant MYSQL 4.0, vous pouvez résoudre ce problème efficacement
en utilisant une table temporaire
(TEMPORARY
). Ce type d'optimisation est très
utile si vous utilisez des requêtes très complexes et que le
serveur SQL fait une optimisation dans le mauvais ordre.
CREATE TEMPORARY TABLE tmp SELECT champ1_index, champ2_index FROM test_table WHERE champ1_index = '1'; INSERT INTO tmp SELECT champ1_index, champ2_index FROM test_table WHERE champ2_index = '1'; SELECT * from tmp; DROP TABLE tmp;
La méthode ci-dessus pour résoudre cette requête est en effet
une UNION
de deux requêtes. See
Section 13.1.7.2, « Syntaxe de UNION
».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.