Исключение лишних сортировок

Оптимизатор исключает из SQL-запроса предложение ORDER BY в следующих случаях:

  1. одновременное использование GROUP BY и ORDER BY.

    Например, поступил на обработку SELECT-запрос с GROUP BY и ORDER BY, в котором все столбцы, указанные в ORDER BY, указаны также и в GROUP BY.

    В этом случае конструкция ORDER BY убирается из запроса, а сортировка по GROUP BY выполняется таким образом, чтобы соблюдались порядок и направление сортировки в ORDER BY;

  2. одновременное использование 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;