Pesquisando em Duas Chaves
O MariaDB 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 MariaDB e acimo, você pode solucionar este problema eficientemente usando um UNION
que combina a saída de duas instruções SELECT
separadas. Leia "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 MariaDB 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.