|
|
|
Объясните, как задействован составной индекс
|
|||
|---|---|---|---|
|
#18+
Опять мои пробелы в матбазе.. Есть таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В ней есть такие индексы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. обращу внимание - cid = primary key. теперь выполняется запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. мы знаем, что составной индекс (email, email_ind) аналогичен индексу (email,email_ind,cid) если так - почему же так долго выполняется запрос.. почему он перебирает значения cid, а не берет их из индекса? cid ведь третье поле, первые 2 заданы в условии. подскажите, чего я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2014, 22:16:50 |
|
||
|
Объясните, как задействован составной индекс
|
|||
|---|---|---|---|
|
#18+
Pilsen , а план выполнения что показывает? сканирование или использование индекса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2014, 23:06:47 |
|
||
|
Объясните, как задействован составной индекс
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2014, 23:27:34 |
|
||
|
Объясните, как задействован составной индекс
|
|||
|---|---|---|---|
|
#18+
Pilsen Код: sql 1. 2. 3. 4. 5. 6. 7. ну и где сканирование таблицы? индекс на 100% работает. Почему долго (и долго ли) - другой вопрос... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 00:21:27 |
|
||
|
Объясните, как задействован составной индекс
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, он имел ввиду, почему мин примари кей не выбирает сразу. ну типо наш индекс это индекс по двум полям, у нас есть оба значения, поэтому индекс находит нужную ветку, на а так как нам нужен минимум ПК, то почему оно сканирует все записи этой ветки, а не сразу берёт первую, ведь имено там будет минимальный первичный ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 11:34:49 |
|
||
|
Объясните, как задействован составной индекс
|
|||
|---|---|---|---|
|
#18+
из http://sqlfiddle.com/#!2/669ce/1 могу предположить, что для индекса из двух полей (без ID) дополнительная сортировка по ID не выполняется. А значит, для получения min(id) необходимо из индекса извлечь все требуемые строки (a,b,id), и среди них вычислить минимальный id Индекс из трех полей, несмотря на избыточность, дополнительно выполняет (явно затребованную) сортировку по id. Из-за этого план выполнения для второго варианта - мне не понятен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 11:57:05 |
|
||
|
Объясните, как задействован составной индекс
|
|||
|---|---|---|---|
|
#18+
Cygapb-007из http://sqlfiddle.com/#!2/669ce/1 могу предположить, что для индекса из двух полей (без ID) дополнительная сортировка по ID не выполняется. А значит, для получения min(id) необходимо из индекса извлечь все требуемые строки (a,b,id), и среди них вычислить минимальный id Индекс из трех полей, несмотря на избыточность, дополнительно выполняет (явно затребованную) сортировку по id. Из-за этого план выполнения для второго варианта - мне не понятен Select tables optimized away Это означает что для выполнения запроса не нужно заглядывать в данные ни одной таблицы...и действительно, данные ответа получаються из чтения только индекса. и кажись я понял что там с двойным. для узла в дереве индекса, там ведь перечислены первичные ключи, но не отсортировано...а по мере добавления. поэтому чтоб найти минимум, надо так сортировать. (последний абзац для автора) тоесть index(f1,f2,PK) <> index(f1,f2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 13:38:50 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=176&tid=1834782]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
23ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 279ms |

| 0 / 0 |
