Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

правильное индексирование   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.056 c
14-1093976300
kaif
2004-08-31 22:18
2004.09.19
Была тут ветка про Шнура


3-1092844481
Aleksandr.
2004-08-18 19:54
2004.09.19
Объясните мне работу АДО-соединений, а то там фигня какая-то...


1-1093897048
LamerOk
2004-08-31 00:17
2004.09.19
От!чень глупый вопрос


14-1093948712
VID
2004-08-31 14:38
2004.09.19
Регистрация: что для этого нужно ?


4-1091891488
Seldon
2004-08-07 19:11
2004.09.19
Как определить какой шрифт...