O MySQL ainda não otimiza quando você pesquisa em duas chaves
diferentes combinadas com OR
(Pesquisa em uma
chave com diferentes partes OR
é muito bem
otimizadas).
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' OR field2_index = '1'
A razão é que nós ainda não tivemos tempos para fazer este
tratamento de uma maneira eficiente no caso geral. (A
manipulação do AND
é, em comparação,
completamente geral e funciona muito bem).
No MySQL 4.0 e acimo, você pode solucionar este problema
eficientemente usando um UNION
que combina a
saída de duas instruções SELECT
separadas.
See Secção 6.4.1.2, “Sintaxe UNION
”. Cada SELECT
busca apenas uma chave e pode ser otimizada.
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';
Em versões do MySQL anteirores a 4.0, você pode conseguir o
mesmo efeito usando uma tabela TEMPORARY
e
instruções SELECT
separadas. Este tipo de
otimização também é muito boa se você estiver utilizando
consultas muito complicadas no qual o servidor SQL faz as
otimizações na ordem errada.
CREATE TEMPORARY TABLE tmp SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1'; INSERT INTO tmp SELECT field1_index, field2_index FROM test_table WHERE field2_index = '1'; SELECT * from tmp; DROP TABLE tmp;
A maneira descrita acima para resolver esta consulta é uma
união (UNION
) de duas consultas.
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.