STRAIGHT_JOIN
wymusza kolejność łączenia tabel, więc table1
jest skanowany w zewnętrznej pętli i table2
w wewnętrznej pętli.
Optymalizator nie jest doskonały (choć wciąż całkiem przyzwoity), a najbardziej prawdopodobną przyczyną są przestarzałe statystyki.
Nie, tylko wtedy, gdy optymalizator jest zły. Może tak być, jeśli dystrybucja danych jest poważnie zniekształcona lub nie można jej poprawnie obliczyć (powiedzmy, dla indeksów przestrzennych lub pełnotekstowych).
Powinieneś zbierać statystyki, tworzyć plany w obie strony i rozumieć, co oznaczają te plany.
Jeśli to widzisz:
-
Automatycznie wygenerowany plan nie jest optymalny i nie można go ulepszyć standardowymi sposobami,
-
STRAIGHT_JOIN
wersja jest lepsza, rozumiesz, że zawsze będzie i rozumiesz dlaczego zawsze będzie
, a następnie użyj STRAIGHT_JOIN
.