Индексирование для объединений в базе данных MySQL - PullRequest
1 голос
/ 03 февраля 2011

У меня был быстрый вопрос о соединениях в MySQL и индексации. Если бы у меня было 2 таблицы:

table1
 id
 name

table2
 table1id
 table2title

И я соединяю table2 и table1, используя id и table1id. Могу ли я добавить индекс к id для table1 и table1id в table2? Или я бы просто добавил индекс в одну из таблиц? Я использую MySQL с MyISAM версии 5.x

Ответы [ 2 ]

3 голосов
/ 03 февраля 2011

Если table1. id является первичным ключом, его не нужно индексировать. (Первичные ключи автоматически индексируются) Если нет, то вам нужно будет индексировать table1. id и table2. table1id

Используйте «EXPLAIN», чтобы увидеть, какие индексы вы нажимаете.

2 голосов
/ 03 февраля 2011

Да, добавить индекс для обоих столбцов id (как сказал другой участник, primary столбцы проиндексированы). Индексы позволяют MySQL быстро находить строку в файле данных вместо последовательного чтения.

Если вам нужны строки из обеих таблиц с заданным идентификатором, индексируйте обе таблицы для оптимальной производительности. Иначе, начальное предложение (SELECT...WHERE) будет выполняться быстро, а JOIN будет медленным (или наоборот), что приведет к медленному запросу.

...