|
|
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
Выявил ряд запросов в Битриксе, в которых в inner join не используется первичный ключ. После значительного упрощения получились запросы (указаны ниже). Два из них используют первичный ключ при inner join, а два - нет. Отличаются возвращаемыми таблицами. Поля "b_iblock_element_prop_s17.IBLOCK_ELEMENT_ID" и "b_iblock_element.ID" - первичные ключи соответствующих таблиц. Код: sql 1. 2. 3. 4. 5. 6. Код: sql 1. 2. 3. 4. 5. 6. Код: sql 1. 2. 3. 4. 5. 6. Код: sql 1. 2. 3. 4. 5. 6. analyze table на обе таблицы говорит, что все хорошо. Какие есть идеи почему так может быть? В итоге нужны данные, вытаскиваемые первыми запросами. Начало тут http://www.sql.ru/forum/1237567/dolgaya-sortirovka-v-zaprose ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 11:10 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
YurikGL, /*Ключ используется select_type=SIMPLE; talble=b_iblock_element_prop_s17; type=ALL; possible_keys=RIMARY; key=PRIMARY; key_len=4; ref=null; rows=51103; Extra=Using index*/ везде читать /*Ключ используется select_type=SIMPLE; talble=b_iblock_element_prop_s17; type=index ; possible_keys=RIMARY; key=PRIMARY; key_len=4; ref=null; rows=51103; Extra=Using index*/ опечатался ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 11:11 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
YurikGL, Поправки по Вашей просьбе внес. Проверьте, правильно ли теперь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 10:18 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
А нафига использовать ключ на маленькой таблице, если потом её всё равно отдавать, а селективность походу не очень? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 10:22 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
miksoftYurikGL, Поправки по Вашей просьбе внес. Проверьте, правильно ли теперь? Все верно, большое спасибо. AkinaА нафига использовать ключ на маленькой таблице, если потом её всё равно отдавать, а селективность походу не очень? Это части гораздо более большого запроса. В нем "неиспользование ключа" дает увеличение времени исполнения в несколько раз. из b_iblock_element_prop_s17 выборки идут достаточно часто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:26 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
Ну попробуй FORCE INDEX... а если сервер его проигнорит, то тебе просто не повезло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:44 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
так FORCE INDEX он не может проигнорить. Игнорит иногда USE INDEX. Ну а вообще в чем суть вопроса? Mysql игнорит индексы потому что может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 18:03 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
netwindтак FORCE INDEX он не может проигнорить. Игнорит иногда USE INDEX. Ну а вообще в чем суть вопроса? Mysql игнорит индексы потому что может. /*Ключ не используется select_type=SIMPLE; talble=b_iblock_element_prop_s17; type=ALL; possible_keys=RIMARY; key=null; key_len=null; ref=null; rows=3358; Extra=null*/ explain select b_iblock_element_prop_s17.* from b_iblock_element_prop_s17 force index (primary) INNER JOIN b_iblock_element ON b_iblock_element.ID=b_iblock_element_prop_s17.IBLOCK_ELEMENT_ID ; Проигнорил. Еще идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 10:21 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
YurikGL, нету идей) "надо смотреть". высылайте самолет и отложите командировочные ) 3358 rows - выглядит достаточно небольшим числом. Видимо последние версии mysql все же отходят от ранее известной прямолинейности, когда force index фактически четко задает план. Или такой план совсем абсурден. Я вообще считают оптимизацию битриксовских запросов непрактичной. Отвалят за лицензию по 60 тыщ, а потом ради одного блока всем мозги парят. Ставьте ssd в radi0. Если сортировки замучали - сделайте ramdrive для tmpdir. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 11:10 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
netwindYurikGL, нету идей) "надо смотреть". высылайте самолет и отложите командировочные ) 3358 rows - выглядит достаточно небольшим числом. Видимо последние версии mysql все же отходят от ранее известной прямолинейности, когда force index фактически четко задает план. Или такой план совсем абсурден. Я вообще считают оптимизацию битриксовских запросов непрактичной. Отвалят за лицензию по 60 тыщ, а потом ради одного блока всем мозги парят. Ставьте ssd в radi0. Если сортировки замучали - сделайте ramdrive для tmpdir. Последнее уже сделано. Таки хотелось бы с ключем запустить. указанная таблица она для примера. Есть где гораздо больше записей и та же проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 13:08 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
YurikGL, ну тогда это значит на больших все же должен заработать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 13:55 |
|
||
|
MySQL не использует ключ при inner join
|
|||
|---|---|---|---|
|
#18+
netwindЯ вообще считают оптимизацию битриксовских запросов непрактичной.В целом соглашусь. Но, однако, десяток-полтора индексов я себе уже насоздавал. Попыток было больше, но остальные пользы не принесли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 19:44 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39344998&tid=1831210]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 487ms |

| 0 / 0 |
