Исключение лишних сортировок
Оптимизатор исключает из SQL-запроса предложение ORDER BY в следующих случаях:
-
одновременное использование GROUP BY и ORDER BY.
Например, поступил на обработку SELECT-запрос с GROUP BY и ORDER BY, в котором все столбцы, указанные в ORDER BY, указаны также и в GROUP BY.
В этом случае конструкция ORDER BY убирается из запроса, а сортировка по GROUP BY выполняется таким образом, чтобы соблюдались порядок и направление сортировки в ORDER BY;
-
одновременное использование DISTINCT и ORDER BY.
Например, в главном SELECT-запросе присутствуют одновременно конструкции DISTINCT и ORDER BY, и все элементы списка ORDER BY входят в список SELECT.
В этом случае элементы списка ORDER BY оптимизатор ставит первыми в списке SELECT-запроса для обработки условия DISTINCT, причем в том же порядке, в каком они заданы в ORDER BY. При этом элементам списка присваиваются спецификации ASC/DESC, а конструкция ORDER BY убирается из запроса.
Например,
Исходная конструкция Оптимизированная конструкция --------------------------------------------------------------------- SELECT DISTINCT(MAKE), MODEL, SELECT DISTINCT(MAKE), COLOR, MODEL, COLOR,WEIGHT FROM AUTO WEIGHT FROM AUTO WHERE MODEL LIKE '%V8%' WHERE MODEL LIKE '%V8%'; ORDER BY MAKE, COLOR;