2012-02-22 2 views
0

Я пытаюсь оптимизировать запрос и застревать. Любая помощь оценивается. В основном есть две таблицы, одна для людей и другая для событий для людей. Структура - это что-то вроде:Избегать подзапроса для оптимизации

table 1 - people - columns - peopleid, name 
table 2 - events - columns - event name, peopleid, description 

Я хочу выяснить людей без событий, без использования подзапроса. Я делал это с подзапросом, но производительность сильно ухудшилась, и мне нужно оптимизировать.

Спасибо за любую помощь

+1

Покажите нам запрос, показывает нам определения таблиц, (с существующими индексами). Подзапрос или объединение, проблема, вероятно, связана с индексированием. –

+2

* Почему * производительность «ухудшилась»? Вместо того, чтобы переходить к выводу, что вам нужно устранить подзапрос, почему бы не узнать, что заставляет его занять слишком много времени (возможно, с помощью 'EXPLAIN' запроса) и решить основную причину? – Borealid

+0

Проверка существующих индексов. Проверьте отсутствующие столбцы и создайте индекс некластерного покрытия. –

ответ

4
SELECT p.peopleid, 
      p.name 
    FROM people p 
LEFT JOIN events e ON e.peopleid = p.peopleid 
    WHERE e.peopleid IS NULL 
+0

Это сокращает время на 6 секунд :). Первоначальный запрос, который у меня есть, занимает около 50 секунд, и для этого требуется около 43,8 секунды. Так что это улучшение. Все еще пытаюсь оптимизировать дальше. Большое спасибо за ответ.Принимая это как правильный, поскольку я еще не вижу другого, и он делает то, что было спрошено в некотором роде. – pinaki

+0

@pinaki: в следующий раз, когда вы спросите что-нибудь об оптимизации db - пожалуйста, прикрепите свою ** настоящую ** схему – zerkms

+0

Я знаю, что это расстраивает, но политика компании и все, что вы знаете, не позволяют поделиться реальной вещью. Я попытался сделать это как можно ближе к реальному. Спасибо за попытку – pinaki

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