При подготовке некоторых запросов, я писал это:Присоединяется, условия и скорость в SQL
SELECT *
FROM ta A
JOIN tb B
ON A.col1 = B.col1
JOIN tc C
ON B.col2 = C.col2
WHERE B.col3 = 'whatever'
AND C.col4 = 'whatever2'
И я начал думать о следующем:
SELECT *
FROM ta A
JOIN (SELECT * FROM tb WHERE col3 = 'whatever') B
ON A.col1 = B.col1
JOIN (SELECT * FROM tc WHERE col4 = 'whatever2') C
ON B.col2 = C.col2
(если я не ошибаюсь , результат будет таким же). Мне интересно, будет ли это значительно быстрее? Я предполагаю, что это было бы, но мне было бы интересно узнать, почему/почему нет?
(Потому что наш сервер не в данный момент, я не могу проверить это сам прямо сейчас, поэтому я спрашиваю здесь, я надеюсь, вы не будете возражать.)
(В случае, если это имеет значение, двигатель Vertica, но мой вопрос не очень специфичен для Vertica)
Являются ли они одинаковыми? Попробуй. Что быстрее? Попробуй. Используйте локальный тестовый сервер. У вас его нет? Установите его. –
Я помню, что задавал себе тот же вопрос для «Oracle», и когда я проверил план объяснений, это было похоже. Вы можете попробовать то же самое для своего db. – Utsav
Ваш вопрос * * относится к Vertica, поскольку он зависит от того, как оптимизируется запрос. Обычно способ решения такой производительности - это индексы, разбиение на разделы и выбор алгоритмов. Как правило, мы зависим от оптимизатора, чтобы принимать разумные решения. –