Код: Выделить всё
SELECT
C.ID,
C.ID_LAW,
C.ID_SOURCE_FINANCE,
C.NUMBER
FROM
DIR_PRIVILEGE_CATEGORY AS C
LEFT JOIN DIR_PRIVILEGE_SOURCE_FINANCE AS S ON C.ID_SOURCE_FINANCE = S.ID
LEFT JOIN DIR_PRIVILEGE_LAW AS L ON C.ID_LAW = L.ID
ORDER BY
C.ID
PLAN JOIN (JOIN (C ORDER PK_DIR_PRIVILEGE_CATEGORY, S INDEX (PK_DIR_PRIVILEGE_SOURCE_FINANCE)), L INDEX (PK_DIR_PRIVILEGE_LAW))
Это правильно - сначала сортировка, затем джойн.
Если же сортировка по неиндексированному полю (например, NUMBER), то план выдается такой:
PLAN JOIN (SORT (JOIN (C NATURAL, S INDEX (PK_DIR_PRIVILEGE_SOURCE_FINANCE))), L INDEX (PK_DIR_PRIVILEGE_LAW))
А вот это странно - сначала джойн, затем сортировка и опять джойн.
По логике, сортировка должна быть либо в начале либо в конце, а никак не в середине. Является ли это багом?
P.S. Тема перемещена из "Общих проблем".