Como o MariaDB Otimiza LEFT JOIN e RIGHT JOIN


A LEFT JOIN B join_condition no MariaDB está implementada como a seguir:

RIGHT JOIN é implementado de forma análoga à LEFT JOIN.

A ordem de leitura das tabelas forçada por LEFT JOIN e STRAIGHT JOIN irá ajudar o otimizador de joins (que calcula em qual ordem as tabelas devem ser unidas) a fazer seu trabalho mais rapidamente, já que haverão poucas permutações de tabelas a serem conferidas.

Perceba que o texto acima significa que se você fizer uma consulta do tipo:

SELECT * FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key)
 WHERE b.key=d.key

A partir do MariaDB 4.0.14, o MariaDB faz a seguinte otimização LEFT JOIN:

Se a condição WHERE é sempre falsa para a linha NULL gerada, o LEFT JOIN é alterado para um join normal.

Por exemplo, na seguinte consulta a cláusula WHERE seria falso se t2.coluna fosse NULL, asssim é seguro converter para uma join normal.

SELECT * FROM t1 LEFT t2 ON (column) WHERE t2.column2 =5;
->
SELECT * FROM t1,t2 WHERE t2.column2=5 AND t1.column=t2.column;

Isto pode ser feito mais rápido já que o MariaDB pode agora usar a tabela t2 antes da tabela t1 se resultasse consulta melhor. Para forçar uma ordem de tabela específica, use STRAIGHT JOIN.

O MariaDB irá fazer uma pesquisa completa em b já que o LEFT JOIN irá força-lo a ser lido antes de d.

A correção neste caso é alterar a consulta para:

Retornar