2013-05-04 2 views
2

As название.который я должен использовать Union all и union, когда я хочу удалить дубликаты записей?

Я видел this, люди все говорят, что мы должны рассмотреть вопрос о объединении всех первых для производительности, мой вопрос в том, какой я должен использовать, когда хочу уничтожить дубликаты записей. Я видел, что разработчик использует объединение всех, чтобы сначала искать записи, а затем фильтровать дубликаты записей Java в источнике нашего проекта, это необходимо? Будет ли союз лучшим выбором для этого случая?

Спасибо!

ответ

2

В прошлом (середина девяностых) некоторые двигатели РСУБД имели очень плохие реализации UNION, поэтому предложение переключиться на UNION ALL и фильтр на клиенте очень часто окупились. Производительность UNION была оптимизирована, однако, так и с современным РСУБД решение должно быть от случая к случаю:

  • Когда вы делаете UNION, база данных должна устранить дубликаты для вас. Если количество записей, возвращаемых из запроса, невелико (скажем, от нескольких сотен до тысячи), то неважно, где можно устранить дубликаты, поэтому вы также можете сделать это на стороне РСУБД.
  • Когда количество записей попадает в десятки тысяч, вы можете устранить дубликаты способом, который умнее, чем у РСУБД, используя конкретные свойства ваших данных. В этом случае вы должны использовать UNION ALL.
  • Если количество строк велико и доля дубликатов очень велика (скажем, вы, UNION ALL из пяти таблиц, причем 70% строк дублируются), может быть лучше сохранить полосу пропускания сети и клиентскую память на с RDBMS устранить дубликаты и уменьшить размер данных, которые будут переданы вам на 70%.

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

0

В соответствии со спецификацией SQL:

  • UNION ALL возвращает все строки в выбранном порядке
  • UNION удаляет дубликаты, но порядок строк произвольно (обычно сортируется)

Так используйте UNION для удалите дубликаты.


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

+0

Спасибо !!!!!!!!!!!!!!!!!!!!!!!! –