Форум: "Базы";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Внизправильное индексирование Найти похожие ветки
← →
snake1977 (2004-08-24 08:43) [0]Здравствуйте! подскажите пожалуйста ,может быть ссылкой может советом :). Каким образом лучше всего раставлять индексы если к таблицам используются только SQL запросы.
т.е. есть запрос select t.*,r.* from table1 t, table2 r where r.id=t.id and t.name="ВАСЯ" and r.Deti=2
какие индексы болбы правилным, установить на эти две таблицы?
по какому принципцу сделать это оптимально?
← →
Anatoly Podgoretsky © (2004-08-24 09:03) [1]По всем полям в условии where
← →
Sergey13 © (2004-08-24 09:06) [2]На поля внешних ключей.
← →
snake1977 (2004-08-24 10:59) [3]>>Anatoly Podgoretsky
т.е. я так понял
в данном примере два индекса, один на table1, один на table2?
а если в запросе стоит условие
where exists (select p.* from table2 p where p.id=t.id and p.Deti=2)
в этом случае что то меняется??
или остается таким же??
← →
Sergey13 © (2004-08-24 11:08) [4]2[3] snake1977 (24.08.04 10:59)
Работа с индексами это слегка искусство, или, уж во всяком случае, очень индивидуальная работа. На одну и ту же таблицу можно сделать несколько "правильных" наборов индексов, которые при смене каких либо условий в момент становятся "неправильными" или неоптимальными или ненужными. Так что пробуй.
← →
snake1977 (2004-08-24 11:58) [5]а как можно в принципе узнать , какие именно идексы использовались для выполнения запроса?
← →
Sergey13 © (2004-08-24 12:18) [6]Смотреть план выполнения, если таковой имеется.
← →
snake1977 (2004-08-24 12:26) [7]а как посмотреть план?
если я использую парадокс-таблицы
← →
Sergey13 © (2004-08-24 12:29) [8]2[7] snake1977 (24.08.04 12:26)
План, вроде доступен только в серверных БД. Хотя может я и ошибаюсь, но с другими не работал давно.
← →
Petr V. Abramov © (2004-08-24 13:56) [9]> По всем полям в условии where
> На поля внешних ключей.
Даже если там три значения на миллион записей???
Индекс надо ставить на те поля, у (которых кол-во различных значений)/(общее кол-во значений) близко к 1 (общее кол-во значений) велико. "Близкость" и "великость" можно оценить след образом:
Если значение поля - уникальное (которых кол-во различных значений)/(общее кол-во значений)) = 1), при безындексном доступе потребуется в среднем n/2 чтений, из которых n/2-1 - "бесполезные" (n число записей в таблице)
Если неуникальное и условию удовлетворяет m записей - потребуется n чтений, из которых n-m - "бесполезные" (то есть, если мы выбирам всю таблицу, n-m = 0 и прямой (безындексный) доступ является самым выгодным.
При индексном поиске уникального значения понадобится log(n) + 1 чтение.
При индексном поиске неуникального значения понадобится log(n) + sizeof(тип значения)*m + m чтений.
Также надо учитывать, что при безындексном доступе блоки читаются последовательно через большой буфер, а при индесном - вразбивку.
Надеюсь, за сумбурностью идея не потерялась
← →
Sergey13 © (2004-08-24 15:37) [10][9] Petr V. Abramov © (24.08.04 13:56)
> Надеюсь, за сумбурностью идея не потерялась
Потерялась. 8-) Т.е. ты советуешь индексы только на первичные ключи сажать? Ты сам то этими выкладками пользуешься в реале?
>Даже если там три значения на миллион записей???
Я на такие поля обычно просто не вешаю ключ например. Т.е. не создаю справочника.
А как например с индексами для сортировки? А для неблокировки дочерних таблиц по FK?
← →
Petr V. Abramov © (2004-08-24 15:46) [11]> Т.е. ты советуешь индексы только на первичные ключи сажать?
Не только
> Ты сам то этими выкладками пользуешься в реале?
Иногда.
>>Даже если там три значения на миллион записей???
>Я на такие поля обычно просто не вешаю ключ например. Т.е. не создаю справочника.
А если 100 на миллион? :)
> А для неблокировки дочерних таблиц по FK?
Отдельная песня. В 90% случаев мастер-таблицы меняются оень редко.
> А как например с индексами для сортировки?
Тут вроде индексы для выборки.
← →
Sergey13 © (2004-08-24 15:52) [12]2[11] Petr V. Abramov © (24.08.04 15:46)
> А если 100 на миллион? :)
А я прикину заранее в голове, что к чему. 8-)
> Отдельная песня. В 90% случаев мастер-таблицы меняются оень редко.
А оставшиеся 10%?
> Тут вроде индексы для выборки.
Ну добавь в выборку Order by 8-)
А вообще я уже писал
>Работа с индексами это слегка искусство, или, уж во всяком случае, очень индивидуальная работа.
(с) Я 8-)
Надеюсь с этим ты согласен?
← →
Petr V. Abramov © (2004-08-24 16:05) [13]>> Отдельная песня. В 90% случаев мастер-таблицы меняются оень редко.
> А оставшиеся 10%?
В 90% из оставшихся 10 :) изменение мастер-таблиц можно поставить непосредственно перед commit
>> Тут вроде индексы для выборки.
> Ну добавь в выборку Order by 8-)
Если в выборке 100 записей, а в таблице - миллион - дешевле в памяти отсортировать. Выборки на миллион записей пользователю не нужны.
>>Работа с индексами это слегка искусство, или, уж во всяком случае, очень индивидуальная работа.
(с) Я 8-)
>Надеюсь с этим ты согласен?
Согласен :) Надо очень индивидуально смотреть распределение, кластеризацию и запросы :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c