Как составить индексы для таблиц в многотабличном запросе

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
postman
Сообщения: 14
Зарегистрирован: 08 авг 2005, 09:44

Как составить индексы для таблиц в многотабличном запросе

Сообщение postman » 11 апр 2006, 12:38

Привет, уважаемый All!
Собственно сабж.
В доке написано, как собирать для однотабличного. Но когда сложный многотабличный запрос(с 2-3 join'ами для миллионных таблиц) не совсем понятно, как задавать для них индексы, чтобы все летало :)
Предложение не использовать индексы не принимается - объемы не те

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 11 апр 2006, 13:04

Подумать как бы тебе лично, вместо сервера, было удобно выполнять вот этот запрос и сделать соответсвующие индексы.

postman
Сообщения: 14
Зарегистрирован: 08 авг 2005, 09:44

Думай как сервер :)

Сообщение postman » 11 апр 2006, 13:50

Заманчивое предложение - как бы я выполнил этот запрос в голове.
Те индексы, которые я так придумал, как раз и тупят :)
Опять повторюсь - запрос МНОГОТАБЛИЧНЫЙ, то есть кол-во измерений достаточно большое и какие индексы создавать навскидку не очевидно.
Метод тупого перебора не подходит - таблицы большие и на создание каждой комбинации уйдет уйма времени.
Собственно хотелось бы услышать или получить ссылку на методику определения необходимых индексов на таблицы на основании имеющихся запросов. Переписать запросы тоже не получится - не мое.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 11 апр 2006, 15:23

Если нет исходника с запросом, то ИСКЛЮЧИТЕЛЬНО методом научного тыка. :) И даже если есть и то сразу угадать довольно сложно и не всем дано. По крайней мере я иногда бывает накалываюсь, потом помедитирую над планом и озарение приходит достаточно быстро.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 апр 2006, 17:03

Собственно хотелось бы услышать или получить ссылку на методику определения необходимых индексов на таблицы на основании имеющихся запросов.
нет таких методик. то есть, они есть, но они слишком простые, чтобы по ним чего-то там писать.

1. должны быть FK по связям между таблицами. индексы по FK строятся автоматически
2. у таблиц должны быть первичные ключи. индексы по ним тоже строятся автоматически
3. при желании, если условие в where выбирает мало записей из их исходного большого числа - строим индексы по соотв. столбцам.

и т.п. Одновременно смотрим на индексы в IBAnalyst, и сопоставляем с тем, по чем индексы построены, и что ищем.

Andrew Sagulin
Сообщения: 53
Зарегистрирован: 11 мар 2005, 15:44

Re: Как составить индексы для таблиц в многотабличном запрос

Сообщение Andrew Sagulin » 18 апр 2006, 11:09

postman писал(а):Привет, уважаемый All!
Собственно сабж.
Для начала определиться с порядком соединения (для чего читать "SQL Tuning" By Dan Tow http://ftp.anyhost.ru/books/ftp.cdut.ed ... ok-LiB.chm), а потом уже создавать нужные для этого индексы.

Эта же книжка есть на русском в книжных магазинах. Название точно не помню (под рукой сейчас нет). Стоит относительно недорого, написана достаточно простым языком. Даже урывками по вечерам, прочитывается за пару недель, тем более, что читать книгу полностью не обязательно: там много посвящено исключениям, редким при нормальной структуре БД.

Ответить