Составные индексы для столбцов в соединениях и где - PullRequest
1 голос
/ 30 ноября 2011

Если у меня есть запрос:

Select *
From tableA
Inner Join tableB ON tableA.bId = tableB.id
Inner Join tableC ON tableA.cId = tableC.id
where
tableA.someColumn = ?

Получу ли я какой-либо выигрыш в производительности от создания составного индекса (bId, cId, someColumn)?

Я использую базу данных DB2 для этого действия.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011

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

Но я давно этим занимаюсь. Гадать, как надеяться, плохо масштабируется.

Вместо того, чтобы гадать, вам лучше узнать, как использовать Утилиты DB2 для объяснения и проектирования . Ожидайте сначала протестировать такие вещи, как индексация на компьютере разработчика. Построение индекса из трех столбцов для таблицы строк на 500 миллионов, которая находится в производстве, не сделает вас популярными.

0 голосов
/ 30 ноября 2011

Индексирование объединений зависит от алгоритма объединения, используемого базой данных.Вы увидите это в плане выполнения.

Вам, вероятно, понадобится индекс для tableA, который начинается с someColumn для предложения where.Все остальное зависит от алгоритма соединения и порядка соединения.

Возможно, вы получите более конкретный ответ, если опубликуете план выполнения.Вы также можете прочитать главу « Операция присоединения » на моем сайте об индексировании SQL и попробовать сами.

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