|
|
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
Столкнулся по работе и заинтересовался вопросом низкоуровневого устройства индексов. Может вопрос тривиальный, не силен в sql, но тем не менее: пример - есть таблица, есть 2 индекса - по полю a и по полю b. Есть запрос - Код: sql 1. Как именно будут использоваться имеющиеся индексы при выборке? То есть, субд взяла из запроса условие (a > 10) и по индексу нашла все записи с нужным а. Каким образом из уже имеющейся выборки с нужным а субд достанет записи с нужным b (b < 20) _с помощью индекса_ по колонке b? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2012, 13:04 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
534986То есть, субд взяла из запроса условие (a > 10) и по индексу нашла все записи с нужным а. Каким образом из уже имеющейся выборки с нужным а субд достанет записи с нужным b (b < 20) с помощью индекса по колонке b? А тебе не приходило в голову, что разные СУБД могут делать это разным способом?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2012, 13:45 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
Хотя и возможно, что большинство из них использует алгоритм Рашмора - побитовое сложение двух масок номеров записей. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2012, 13:59 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
534986, Ну ты уже сделал одно предположение утверждаешь о том, что БД сначала отберет по А, а потом уже... А это утверждение верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2012, 14:11 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov спасибо, интересно, почитаю Edd.Dragon 100%, просто предположение, я не утверждаю, что так и будет. Наоборот, интересно - как оно будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2012, 20:51 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
534986Как именно будут использоваться имеющиеся индексы при выборке? Ну для начала стоит подумать, какие вообще имеются индексы. Например, если имеется индекс по (a, b) или (b, a), СУБД оценит его селективность (а если тупая - не оценит) и если сочтёт её удовлетворительной, найдёт в нём записи с нужной комбинацией значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 11:39 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
Нет, в том то и дело - индексы не составные. Просто два отдельных индекса - по а и по b. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 13:34 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
534986Просто два отдельных индекса - по а и по b. А вот, например, Н2 умеет использовать только один индекс на таблицу. Два - не умеет вообще. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 13:48 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
534986Нет, в том то и дело - индексы не составные. Просто два отдельных индекса - по а и по b. Вслепую я бы предположил, что СУБД использует только один какой-то индекс. Для cost-based оптимизатора вопрос в том, что затруднительно собрать и поддерживать статистику по всем возможным комбинациям условий со всеми перекосами - поэтому трудно оценить стоимость такого составного доступа. Rule-based-у же приходится учитывать, что второй индекс с вероятностью 50% затормозит (а не ускорит) выполнение запроса. В то же время - не факт. В частности, Oracle отработает такую ситуацию, если оба индекса - bitmap-ы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 14:15 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
битмапы легко складывать, но то они и битмапы. Но оракл умеет склеивать и два b-tree индекса через операцию BITMAP CONVERSION FROM ROWIDS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 15:05 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
Умеет, но исчезающе редко это делает. Особенно если не подталкивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 15:07 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
кстати даже MySQL умеет это делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 15:11 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
534986, Ключ в табличке my_table есть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2012, 12:49 |
|
||
|
Устройство индексов
|
|||
|---|---|---|---|
|
#18+
SignOff, Да скорее всего оптимизатор выберет сам наиболее оптимальный путь. Например если у тебя в табличке будет строк 30 - он может легко выбрать Table Scan. Есть многои других факторов, например ключ. Или вот например в восходящем или нисходящем порядке индексировано. Кроме того индексы могут быть не составными, но включающий другие поля... Вообщем чтобы понять тайны оптимизатора тебе необходимо устроится на работу к разработчикам СУБД что ты юзаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2012, 12:55 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37743828&tid=1541750]: |
0ms |
get settings: |
4ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
149ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 447ms |

| 0 / 0 |
