Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Устройство индексов / 14 сообщений из 14, страница 1 из 1
08.04.2012, 13:04
    #37743774
534986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
Столкнулся по работе и заинтересовался вопросом низкоуровневого устройства индексов.

Может вопрос тривиальный, не силен в sql, но тем не менее:

пример - есть таблица, есть 2 индекса - по полю a и по полю b.

Есть запрос -
Код: sql
1.
select * from my_table where a > 10 and b < 20;


Как именно будут использоваться имеющиеся индексы при выборке?

То есть, субд взяла из запроса условие (a > 10) и по индексу нашла все записи с нужным а. Каким образом из уже имеющейся выборки с нужным а субд достанет записи с нужным b (b < 20) _с помощью индекса_ по колонке b?
...
Рейтинг: 0 / 0
08.04.2012, 13:45
    #37743807
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
534986То есть, субд взяла из запроса условие (a > 10) и по индексу нашла все записи с нужным а.
Каким образом из уже имеющейся выборки с нужным а субд достанет записи с нужным b (b < 20)
с помощью индекса по колонке b?

А тебе не приходило в голову, что разные СУБД могут делать это разным способом?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.04.2012, 13:59
    #37743819
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
Хотя и возможно, что большинство из них использует алгоритм Рашмора - побитовое сложение
двух масок номеров записей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.04.2012, 14:11
    #37743828
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
534986,

Ну ты уже сделал одно предположение утверждаешь о том, что БД сначала отберет по А, а потом уже... А это утверждение верно?
...
Рейтинг: 0 / 0
08.04.2012, 20:51
    #37744251
534986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
Dimitry Sibiryakov

спасибо, интересно, почитаю


Edd.Dragon

100%, просто предположение, я не утверждаю, что так и будет. Наоборот, интересно - как оно будет?
...
Рейтинг: 0 / 0
09.04.2012, 11:39
    #37744782
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
534986Как именно будут использоваться имеющиеся индексы при выборке?
Ну для начала стоит подумать, какие вообще имеются индексы. Например, если имеется индекс по (a, b) или (b, a), СУБД оценит его селективность (а если тупая - не оценит) и если сочтёт её удовлетворительной, найдёт в нём записи с нужной комбинацией значений.
...
Рейтинг: 0 / 0
09.04.2012, 13:34
    #37745034
534986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
Нет, в том то и дело - индексы не составные. Просто два отдельных индекса - по а и по b.
...
Рейтинг: 0 / 0
09.04.2012, 13:48
    #37745056
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
534986Просто два отдельных индекса - по а и по b.

А вот, например, Н2 умеет использовать только один индекс на таблицу. Два - не умеет вообще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.04.2012, 14:15
    #37745092
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
534986Нет, в том то и дело - индексы не составные. Просто два отдельных индекса - по а и по b.
Вслепую я бы предположил, что СУБД использует только один какой-то индекс. Для cost-based оптимизатора вопрос в том, что затруднительно собрать и поддерживать статистику по всем возможным комбинациям условий со всеми перекосами - поэтому трудно оценить стоимость такого составного доступа. Rule-based-у же приходится учитывать, что второй индекс с вероятностью 50% затормозит (а не ускорит) выполнение запроса.

В то же время - не факт. В частности, Oracle отработает такую ситуацию, если оба индекса - bitmap-ы.
...
Рейтинг: 0 / 0
09.04.2012, 15:05
    #37745215
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
битмапы легко складывать, но то они и битмапы.
Но оракл умеет склеивать и два b-tree индекса через операцию BITMAP CONVERSION FROM ROWIDS
...
Рейтинг: 0 / 0
09.04.2012, 15:07
    #37745219
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
Умеет, но исчезающе редко это делает. Особенно если не подталкивать.
...
Рейтинг: 0 / 0
09.04.2012, 15:11
    #37745230
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
кстати даже MySQL умеет это делать
...
Рейтинг: 0 / 0
10.04.2012, 12:49
    #37746662
SignOff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
534986,

Ключ в табличке my_table есть ?
...
Рейтинг: 0 / 0
10.04.2012, 12:55
    #37746679
SignOff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Устройство индексов
SignOff,

Да скорее всего оптимизатор выберет сам наиболее оптимальный путь. Например если у тебя в табличке будет строк 30 - он может легко выбрать Table Scan. Есть многои других факторов, например ключ. Или вот например в восходящем или нисходящем порядке индексировано.

Кроме того индексы могут быть не составными, но включающий другие поля... Вообщем чтобы понять тайны оптимизатора тебе необходимо устроится на работу к разработчикам СУБД что ты юзаешь.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Устройство индексов / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]