Возможно, есть очевидный ответ на этот вопрос, но у меня есть один момент времени, когда-либо с ним.Исключить записи, соответствующие подзапросу
Рассмотрим запрос:
SELECT * FROM reports AS r JOIN reportvalues AS rv ON rv.report_id = r.report_id JOIN metrics AS m ON m.metric_id = rv.metric_id WHERE r.report_id NOT IN( SELECT DISTINCT report_id FROM exclude_report )
В этом запросе exclude_report
представляет собой вид строится аналогичным образом.
Теперь, что происходит, запрос выполняет ЧРЕЗВЫЧАЙНО долгое время, по-видимому, потому, что подзапрос выполняется по каждой строке в родительском запросе. Однако я не нахожу никаких возможных способов сделать это любым другим способом.
О, замечательные мастера SQL, пожалуйста, советую. Мне действительно нужен способ сделать все это в SQL, который я буду использовать в SSRS.
Информация не достаточна. Просто запустите запрос в студии управления SQL-сервером и посмотрите план выполнения. Он покажет вам, какие аспекты медленны, и затем вы можете оптимизировать запрос на основе результатов. Всегда оптимизируйте факты, а не гипотезы. –
Учитывая, что я парень MySQL, результат выполнения плана на самом деле не очень помогает мне. Каждый запрос индивидуально будет работать в считанные секунды, но все, что осталось на 5 минут, не завершено. Этап, на котором план исполнения показывает самую высокую стоимость, представляет собой «Сканирование с кластеризацией индексов» по всем ПК, за которым следует «Hash Match». Я чувствую себя потерянным и смущенным. – Skudd
Кстати, вам действительно нужен SELECT *? Или будет меньше столбцов? –