STRAIGHT_JOIN
принуждава реда на присъединяване на таблиците, така че table1
се сканира във външния цикъл и table2
във вътрешния контур.
Оптимизаторът не е перфектен (макар и доста приличен), а най-вероятната причина е остарялата статистика.
Не, само когато оптимизаторът е грешен. Това може да е, ако разпределението на данните ви е силно изкривено или не може да бъде изчислено правилно (да речем, за пространствени или пълнотекстови индекси).
Трябва да съберете статистическите данни, да изградите плановете и за двата начина и да разберете какво означават тези планове.
Ако видите това:
-
Автоматично генерираният план не е оптимален и не може да бъде подобрен по стандартните начини,
-
STRAIGHT_JOIN
версията е по-добра, разбирате, че винаги ще бъде и разбирате защо винаги ще бъде
, след което използвайте STRAIGHT_JOIN
.