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.

Retornar