В MySQL есть способ индексировать информацию по разным таблицам - PullRequest
1 голос
/ 23 марта 2012

Моя схема MySql выглядит следующим образом

create table TBL1 (id, person_id, ....otherData)
create table TBL2 (id, tbl1_id, month,year, ...otherData)

Я запрашиваю эту схему как

select * from TBL1 join TBL2 on (TBL2.tbl1_id=TBL1.id)
where TBL1.person_id = ?
and TBL2.month=?
and TBL2.year=?

В настоящее время проблема состоит в том, что в TBL1 существует около 18 КБ записей, связанных с каким-то person_idи есть также около 20 тыс. записей на TBL2, связанных с одинаковыми значениями месяца / года.

На данный момент у меня есть два индекса.index1 для TBL1 (person_id) и другие для index2 для TBL2 (месяц, год)

, когда база данных выполняет запрос, она использует index1 (игнорируя параметры месяца и года) или index2 (игнорируя параметр person_id).Итак, в обоих случаях он сканирует около 20 тыс. Записей и работает не так, как ожидалось.

Есть ли у меня какой-либо способ создать один индекс для обеих таблиц или сообщить mysql о слиянии de index при запросе?

Ответы [ 3 ]

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

Нет.Индексы в отдельных таблицах.

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

Вам нужны составные индексы в обеих таблицах, чтобы включить столбец соединения.Если вы добавите «ID» к обоим индексам, оптимизатор запросов должен поднять это.

Можете ли вы опубликовать "ОБЪЯСНИТЬ"?

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

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

Есть ли у вас индексы TBL2.tbl1_id и TBL1.id?

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