используя отличную команду - PullRequest
3 голосов
/ 12 апреля 2011

использование отдельной команды в SQL - это хорошая практика или нет? есть ли какой-то недостаток в отдельной команде?

Ответы [ 5 ]

11 голосов
/ 12 апреля 2011

Это полностью зависит от вашего варианта использования. DISTINCT полезен при определенных обстоятельствах, но его можно использовать слишком много.

Недостатками являются, в основном, повышенная нагрузка на механизм запросов для выполнения сортировки (поскольку ему необходимо сравнивать набор результатов с самим собой для удаления дубликатов), и его можно использовать для маскировки проблемы в ваших данных - если вы получаете дубликаты может быть проблема с вашими исходными данными.

Сама команда не является хорошей или плохой. Вы можете использовать отвертку, чтобы забить гвоздь, но это не значит, что это хорошая идея, или что отвертки плохие во всех случаях.

5 голосов
/ 12 апреля 2011

Если вам нужно использовать его регулярно для получения правильного вывода, то у вас есть проблема дизайна или JOIN

Это совершенно справедливо для использования в противном случае.

Хотя это своего рода совокупность:эквивалент GROUP BY во всех выходных столбцах.Так что это дополнительный шаг обработки запросов

1 голос
/ 12 апреля 2011

С этого http://www.mindfiresolutions.com/Think-Before-Using-Distinct-Command-Arbitarily-1050.php

Иногда видно, что новички получают дубликаты в своем наборе результатов, тогда они используют DISTINCT. Но это имеет свои недостатки.

Distinct снижает производительность запроса. Потому что обычная процедура сортирует результаты, а затем удаляет строки, которые равны ряду непосредственно перед ним.

DISTINCT сравнивает все поля записи. Таким образом, DISTINCT увеличивает вычисления.

1 голос
/ 12 апреля 2011

Это часть языка, поэтому его следует использовать.

В некоторых случаях использование DISTINCT может привести к сканированию таблицы, если в противном случае это не произойдет.

Вам потребуетсяпротестируйте каждый из ваших вариантов использования, чтобы увидеть, есть ли влияние, и найдите обходной путь, если воздействие неприемлемо.

0 голосов
/ 12 апреля 2011

Если вы хотите, чтобы результаты работали на сервере SQL на компьютере SQL с отчетливыми результатами, используйте его. Если вы не против отправить дополнительные результаты клиенту и выполнить работу там (чтобы уменьшить нагрузку на сервер), то сделайте это. Это зависит от ваших требований к производительности и характеристик вашей базы данных.

Например, если крайне маловероятно, что отличный будет значительно уменьшить набор результатов, и у вас нет нужных столбцов, проиндексированных для его ускорения, и вам нужно уменьшить нагрузку на SQL Server, и у вас есть свободные циклы клиент, и это легко обеспечить отличимость на клиенте - тогда вы можете сделать это.

Это много если и против, и могуществ. Если не знаешь - просто используй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...