powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Устройство индексов
14 сообщений из 14, страница 1 из 1
Устройство индексов
    #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
Устройство индексов
    #37743807
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
534986То есть, субд взяла из запроса условие (a > 10) и по индексу нашла все записи с нужным а.
Каким образом из уже имеющейся выборки с нужным а субд достанет записи с нужным b (b < 20)
с помощью индекса по колонке b?

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

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

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


Edd.Dragon

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

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

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

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

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

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


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