Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2013, 16:40   #1
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию Много индексов + игнорирование индексов

Всем привет. Читал недавно различные статьи про оптимизацию выборок посредством создания индексов. Пришла такая идея:

Есть поля:
a,b,c,d

Создаем комбинированные индексы:
abcd(a,b,c,d)
bcd(b,c,d)
abd(a,b,d)
ad(a,d)

Теперь, делая выборку с поиском по полям a, b и d, мы игнорируем лишние индексы:

Код:
... FROM `table` IGNORE INDEX (abcd,bcd,ad) WHERE ...
То есть мы оставляем только тот индекс, который подходит по условию выборки.

Конечно для жирной базы индексы будут занимать очень много места, но зато какая скорость.

Как вам идея?
Mr_freeman вне форума Ответить с цитированием
Старый 06.08.2013, 17:29   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Как вам идея?
Не очень. Можно нарваться, что запрос будет в несколько раз дольше работать. Нужно использовать только тогда, когда EXPLAIN показывает неправильное использование индекса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.08.2013, 20:54   #3
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не очень. Можно нарваться, что запрос будет в несколько раз дольше работать. Нужно использовать только тогда, когда EXPLAIN показывает неправильное использование индекса
Почему запрос может работать в несколько раз дольше?
Mr_freeman вне форума Ответить с цитированием
Старый 06.08.2013, 21:17   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Почему - не скажу, но как-то сталкивался с этим. А вообще СУБД при наличие нескольких индексов само подбирает необходимый в зависимости от условий во WHERE или JOIN. И сравните производительность без указания IGNORE INDEX и с ним
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.08.2013, 21:17   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Почитай еще про частичное использование индекса (index range scan). В нормальной СУБД это должно быть реализовано. Суть в том, что при наличии индекса (a, b, c) он используется также и для поиска по (a) и (a, b).

Наличие индекса на все поля -- крайний случай. Может быть продиктован как особенностями задачи, так и некомпетентностью проектировщика.
Vapaamies вне форума Ответить с цитированием
Старый 06.08.2013, 22:09   #6
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Да уж так сразу то и не скажешь, а там еще и связи с другими таблицами.. надо все тестировать вообщем)
Mr_freeman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание индексов Droid SQL, базы данных 5 02.02.2012 16:30
удаление индексов массива TotKtoNado БД в Delphi 13 05.08.2011 17:03
найти добуток индексов misha25525 Помощь студентам 0 11.04.2010 11:57
найти суму индексов misha25525 Помощь студентам 0 11.04.2010 11:51
Простановка индексов улиц 6ecuk Microsoft Office Excel 8 25.09.2009 12:36