Оптимизация множественного соединения или подзапроса - PullRequest
0 голосов
/ 06 октября 2009

У меня есть этот запрос, который выполняется за 1 или 2 секунды для данного случая:

    Select Count(*) as qtty  
    From event e  
    Join org o On o.orgID = e.orgID  
    Join venue v On v.venueID = e.venueID  
    Where Match( e.name, e.description ) Against ( $keywords )  
        And e.site_id = $site_id  
        And e.display <> 0</code>

Считает строки для построения нумерации страниц. Когда я ввел фильтрацию по типу события (типы связаны многими со многими событиями), запрос начал занимать не менее 45 секунд:

    And Exists (   
      Select ete.id  
      From event_type_to_event ete   
      Where ete.event_id = e.eventID  
      And ete.event_type_id = $category )</code>

Я также пытался соединиться с event_type_to_event, но это было еще медленнее.
Есть предложения?

ПРИМЕЧАНИЕ: решено. С помощью индексов время выполнения запроса сократилось до секунды.

1 Ответ

1 голос
/ 06 октября 2009

Я подозреваю, что вам нужно добавить индекс для столбца event_type_id в таблице event_type_to_event, но если там уже есть индекс, попробуйте следующее:

Select Count(*) as qtty
From event e
   Join org o On o.orgID = e.orgID
   Join venue v On v.venueID = e.venueID
Where Match( e.name, e.description ) Against ( $keywords )
   And e.site_id = $site_id
   And e.display <> 0
   And Exists 
      (Select * From event_type_to_event 
       Where event_id = e.eventID
          And event_type_id = $category)

Если Event_Id является PK таблицы event_type_to_event, вы также можете попробовать объединение вместо использования Exists,

Select Count(*) as qtty
From event e
   Join org o On o.orgID = e.orgID
   Join venue v On v.venueID = e.venueID
   Join event_type_to_event t
       On t.event_id = = e.eventID
Where Match( e.name, e.description ) Against ( $keywords )
   And e.site_id = $site_id
   And e.display <> 0
   And t.event_type_id = $category
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...