Я выбираю один столбец внешних ключей из нескольких таблиц через UNION или UNION ALL.
Обычно рекомендуется использовать UNION ALL вместо UNION для проблем производительности, когда дубликаты не имеют значения. Однако в моем вызывающем PHP-скрипте было бы более эффективно проходить и манипулировать данными без дубликатов.
Итак, я могу использовать любую из следующих опций:
Опция 1:
Используйте UNION в базе данных для устранения дубликатов
Вариант 2:
используйте UNION ALL в базе данных и удалите данные в моем PHP-скрипте, используя array_unique () или другие подобные функции.
Я предполагаю, что вариант 1 будет предпочтительным и более эффективным методом в большинстве случаев, однако мне нечего подкреплять это предположение, и я не уверен, что это лучший способ проверить его, особенно потому, что он, вероятно, будет сильно зависеть от того, что данные были.
Правильно ли мое предположение в большинстве случаев? Если так, то почему? Если нет, то почему нет?
Главным аспектом является то, что UNION является сокращением для UNION DISTINCT и так
разница в производительности между UNION и UNION ALL связана с
нужно получить отличный результат и для этого ядро базы данных и оптимизатор запросов
безусловно, более эффективны и эффективны, чем алгоритм фильтрации, основанный на PHP-коде в приложении.
Кроме того, продиктованная операция может выиграть от предварительной оптимизации группы по функциональности
Мало того, фильтрация дублирующихся данных, как правило, основана на упорядоченных данных
в то время как функции select sql работают без явного упорядочения,
и, следовательно, необходимость фильтрации данных с помощью приложения может привести к менее эффективным и более длительным запросам.
Как правило, движок БД гораздо эффективнее кода функций приложения, поэтому вариант 1, как правило, является лучшим выбором.
По скорости это относительно незначительно. Усилия, чтобы сделать все SELECTs
это больше, чем делать дедупликацию, в зависимости от того, как вы это делаете.
Поэтому я рекомендую сказать UNION DISTINCT
, поскольку это несколько нажатий клавиш для вас, чем array_unique(...)
,
Другие соображения:
UNION ALL
переложит больше материала с сервера на клиент; это (в экстремальной или отдаленной ситуации) может быть фактором производительности.ORDER BY
на UNION
Вы можете также сделать DISTINCT
, тоже.GROUP BY
(на UNION
) имеет эффект DISTINCT
,