|
(По материалам статьи Neil Boyle на swynk.com "Speed up SELECT DISTINCT queries") Нил пишет, что многие используют опцию DISTINCT в инструкции select для фильтрации дубликатов. Например, простой запрос для базы данных PUBS: select DISTINCT В простой выборке из одной таблицы это - самый простой и
быстрый способ получения результата. select DISTINCT Здесь нам нужно видеть только уникальные имена авторов, которые написали книги. Запрос будет работать, как требуется, но мы можем повысить его эффективность, если перепишем его так: select au_fname, au_lname Причина более быстрой отработки запроса в том, что
предложение EXISTS возвратит имя сразу же, когда найдена
первая книга, и никакие другие книги этого автора далее не
будут сканироваться (мы уже получили имя автора, и это всё,
что нам нужно). С другой стороны, запрос DISTINCT возвращает
одну копию имени автора для, каждой его книги и продолжил бы
работу, пока не обработал бы весь список и не отсёк дубликаты
согласно предложению DISTINCT. Вы можете исследовать план
выполнения каждого из представленных запросов, чтобы увидеть
причину повышения эффективности последнего примера.
select DISTINCT o.name select o.name Вы должны понять особенности объединения двух (или больше) таблиц, чтобы использовать это для эффективного выполнения. Следующие два запроса для базы данных Northwind предназначены для возврата ID заказчика, у которого установлена скидка больше чем 2 процента для любой позиции. На первый взгляд они будут вести себя так же, как в предыдущем примере (форматы запросов схожи), но полученные фактические результаты окажутся другими. select DISTINCT customerID select customerID from orders o Разница эффективности выполнения этих запросов в том, что OrderID, который определяет зависимость между двумя таблицами, не является именем заказчика. Второй запрос возвратит множество имён заказчика - одно для каждой позиции, полученной заказчиком. Пробуйте добавить столбец OrderID в список SELECT, чтобы увидеть это.
Сайт управляется системой uCoz
|