MySQL множественные объединения с условиями на производительность запроса нескольких таблиц - PullRequest
0 голосов
/ 28 марта 2012

предположим, таблицы:

main (1M строк): id, a_id, b_id, c_id, d_id, суммы, год, main_col

a (500 строк): id, a_col1, a_col2

b (2000 строк): идентификатор, b_col1, b_col2, b_col3

c (500 строк): идентификатор, c_col1, c_col2

d (1000 строк): идентификатор,d_col1, d_col2

И у нас есть запрос вроде:

select sum(amounts), main_col 
   join a on a.id = main.a_id 
   join b on b.id = main.b_id 
   join c on c.id = main.c_id 
   join d on d.id = main.d_id 
   where a.a_col1 in (...) 
     and a.a_col2 in (..) 
     and b.b_col1 in (...) 
     and b.b_col2 in (...) 
     and b.b_col3 in (..) 
     and c.c_col1 in (..) 
     and c.c_col2 in (..) 
     and d.d_col1 in (..) 
     and d.d_col2 in (..)
     and year = 2011

   group by main.main_col

есть идеи, кто создать индекс для основной таблицы, чтобы повысить производительность запроса?

спасибо

Обновление: индексы добавляются в таблицы a, b, c, d для столбцов, которые отображаются там, где я пробовал несколько индексов столбцов в основной таблице (a_id, b_id, c_id, d_id, main_col), которые имеют лучшую производительностьчем другие, такие как добавление отдельных индексов в a_id, b_id ..., но это все еще недостаточно быстро для требования, для запроса потребуется 7 секунд для выполнения в максимальной ситуации

Ответы [ 4 ]

1 голос
/ 28 марта 2012

Это действительно зависит от специфики, например, от того, насколько избирательным является каждое объединение, насколько велика каждая таблица и т. Д. В целом, возможно, было бы целесообразно добавить один или несколько индексов для внешних ключей вашей основной таблицы, но кто из них может сказать ограниченная информация?

Это также может помочь понять, как выполняется ваш запрос - попробуйте взглянуть на MySQL "объяснить" или "объяснить расширенный".

1 голос
/ 28 марта 2012

CREATE INDEX id_main ON main (id)

Вы можете создать несколько индексов для дополнительных столбцов и посмотреть, как это работает для вас.

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

0 голосов
/ 28 марта 2012

У вас также должен быть индекс для вашей группы. Я думаю,

0 голосов
/ 28 марта 2012

Поскольку первичные ключи уже проиндексированы по умолчанию, объединение не может быть оптимизировано путем добавления дополнительных индексов.Так что это оставляет ваши заявления.Так что это может помочь добавить индексы к столбцам x.x_colN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...