#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
использование отдельной команды в SQL — это хорошая практика или нет? есть ли какой-либо недостаток distinct command?
Комментарии:
1. Есть ли какой-либо недостаток в использовании команды select ? Если вам это нужно, используйте это.
2. Что ж, если вы верите тому, что об этом говорит Сиджей Дейт, вы должны применять это всегда ради корректности, но, похоже, ему все равно не нравится SQL…
Ответ №1:
Это полностью зависит от вашего варианта использования. DISTINCT
полезно при определенных обстоятельствах, но им можно злоупотреблять.
Недостатками в основном являются повышенная нагрузка на механизм запросов для выполнения сортировки (поскольку ему необходимо сравнить результирующий набор с самим собой, чтобы удалить дубликаты), и это может использоваться для маскировки проблемы в ваших данных — если вы получаете дубликаты, может возникнуть проблема с вашими исходными данными.
Сама команда по своей сути не является хорошей или плохой. Вы можете использовать отвертку, чтобы забить гвоздь, но это не значит, что это хорошая идея или что отвертки плохи во всех случаях.
Ответ №2:
Если вам нужно регулярно использовать его для получения правильного вывода, значит, у вас проблема с дизайном или объединением
Это вполне допустимо для использования в противном случае.
Однако это своего рода агрегат: эквивалент ГРУППЫ ПО для всех выходных столбцов. Таким образом, это дополнительный шаг — обработка запроса
Ответ №3:
Из этого http://www.mindfiresolutions.com/Think-Before-Using-Distinct-Command-Arbitarily-1050.php
Иногда бывает видно, что новички получают некоторые дубликаты в своем результирующем наборе, тогда они используют DISTINCT. Но у этого есть свои недостатки.
Distinct снижает производительность запроса. Потому что обычной процедурой является сортировка результатов с последующим удалением строк, которые равны строке непосредственно перед ней.
DISTINCT сравнивает между собой все поля записи. Таким образом, DISTINCT увеличивает количество вычислений.
Ответ №4:
Это часть языка, поэтому его следует использовать.
При некоторых обстоятельствах использование DISTINCT
может привести к сканированию таблицы там, где в противном случае оно бы не произошло.
Вам нужно будет протестировать каждый из ваших собственных вариантов использования, чтобы увидеть, есть ли влияние, и найти обходной путь, если влияние неприемлемо.
Ответ №5:
Если вы хотите, чтобы работа по обеспечению отличных результатов выполнялась внутри SQL server на компьютере SQL, то используйте это. Если вы не возражаете отправить дополнительные результаты клиенту и выполнить работу там (чтобы уменьшить нагрузку на сервер), тогда сделайте это. Это зависит от ваших требований к производительности и характеристик вашей базы данных.
Например, если крайне маловероятно, что distinct сильно уменьшит результирующий набор, и у вас нет правильных столбцов, проиндексированных для ускорения, и вам нужно уменьшить нагрузку на SQL Server, и у вас есть свободные циклы на клиенте, и легко обеспечить четкость на клиенте — тогда вы можете захотеть это сделать.
Здесь много «если», «и»возможно». Если вы не знаете — просто используйте это.