Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.037 c
14-1093935407
Nikolay M.
2004-08-31 10:56
2004.09.19
Гостиницы в Питере - 2


1-1094301723
KA_
2004-09-04 16:42
2004.09.19
Проблема с trunc


4-1091597087
ERASER
2004-08-04 09:24
2004.09.19
Добавить пункт в меню Windows


1-1094555125
Koala
2004-09-07 15:05
2004.09.19
Ошибка при выполнении процедуры


1-1093402316
Александр1
2004-08-25 06:51
2004.09.19
Разделение строчек





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский