2015-08-05 2 views
0

Я с низкой производительностью запросов, а иногда он пришел к ошибке «Не удается выделить место для объекта" Темп рабочего стола»Низкая производительность запросы

У меня есть 2 таблицы и 1 вид. Первые две таблицы имеют левое соединение, и последнее представление будет выполнять вспомогательный запрос. Ниже приведен пример запроса.

SELECT a.* 
    FROM Table1 a LEFT JOIN Table2 b ON a.ID = b.ID 
WHERE a.ID (SELECT ID 
       FROM View1). 

Вышеуказанный запрос выполняется очень медленно. НО, когда я использовал таблицу #temp, она становится быстрее.

SELECT ID 
    INTO #Temp 
    FROM View1 

SELECT a.* 
    FROM Table1 a LEFT JOIN Table2 b ON a.ID = b.ID 
WHERE a.ID IN (SELECT ID 
        FROM #Temp) 

Может кто-нибудь объяснить, почему первое заявление sql происходит очень медленно? и любезно дать мне совет, как добавить новый индекс?

Примечание: первый запрос не может быть изменен или изменен. Я использовал только второй запрос, чтобы показать моей команде, что если мы помещаем 3-ю таблицу во временную таблицу и используем ее, она работает быстрее.

+0

ли у вас какие-либо индекс в любой из колонки? по крайней мере, в 'ID'? – Crazy2crack

+0

@ Crazy2crack, да. Я помещаю индекс в внешние ключи (Таблица 2 и Таблица 3) – Chris

+0

@ Crazy2crack, Table3 не является таблицей своего вида. Я уже сменил тело. – Chris

ответ

2

В основном в первом запросе вы просматриваете представление для каждой строки, и в свою очередь представление выполняет его запрос.

Во втором случае вы выполняете запрос вида только один раз и используя возвращаемые результаты через таблицу temp.

Try:

SELECT a.* 
    FROM Table1 a LEFT JOIN Table2 b ON a.ID = b.ID, 
     (SELECT ID 
      FROM View1) c 
WHERE a.ID = c.ID; 
+0

Это имеет смысл. Быстрый вопрос. Если мы преобразуем представление в физическую таблицу, это будет сделано быстро, правильно? – Chris

+0

Абсолютно, и вы можете проиндексировать его, если хотите. Но поскольку @Renzo сказал, что вы также можете создать его как материализованное представление. – MarioAna

+0

Не слышал материализованного вида. Но сделайте исследование этого. – Chris

Смежные вопросы