|
|
|
Анализ плана выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Сравнительно недавно занялся изучением планов выполнения запросов и еще не совсем освоился. Надеюсь на вашу помощь. Раньше я думал, что при составлении запроса нужно следить, чтобы mysql просматривал как можно меньше строк. Но сегодня столкнулся с обратным результатом. Может, кто из опытных, подскажет в чем дело? Возможно из-за того, что таблицы маленькие их полное сканирование работает быстрее, чем прыжки по индексам? Кеши для чистоты эксперимента отключены. Таблицы (лишние поля опущены): Код: plsql 1. 2. 3. 4. 5. 6. Код: plsql 1. 2. 3. 4. 5. 6. 7. А вот три равнозначных запроса и планы их выполнения: 1. Используется подзапрос вместе с IN, тип соединения ALL (сканирует все 53 строки) выполняется за 0.02s. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra 1PRIMARYuser_dataALL53Using where2DEPENDENT SUBQUERYusersunique_subqueryPRIMARY.id.key_reg_datePRIMARY4func1Using where 2. Подзапрос в JOIN, работает тоже быстро 0.02s. Если я не ошибаюсь получается, что сканирует (17+17)*17 строк. Поправьте, пожалуйста, если ошибаюсь. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra 1PRIMARY<derived2>ALL171PRIMARYuser_datarefuser_id.fk_user_data_usersuser_id4a.id12DERIVEDusersrangekey_reg_datekey_reg_date817Using where; Using index 3. Обычный JOIN. Простое соединение по внешнему ключу. Посравнению с предыдущими очень медленный: 0.69s. Сканирует 17+17 строк. (т.е. меньше всего). Опять же, поправьте, если ошибаюсь. Код: plsql 1. 2. 3. 4. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra 1SIMPLEusersrangePRIMARY.id.key_reg_datekey_reg_date817Using where; Using index1SIMPLEuser_datarefuser_id.fk_user_data_usersuser_id4webosx_master.users.id1 Т.е. в итоге самый медленный запрос - третий, хотя, как мне казалось, он должен работать быстрее подзапросов. Просветите, кому не жалко, почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 13:43:25 |
|
||
|
Анализ плана выполнения запроса
|
|||
|---|---|---|---|
|
#18+
structorias, Такие эксперименты всегда нужно сопровождать точной версией MySQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 13:46:16 |
|
||
|
Анализ плана выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Не нашел кнопки "редактировать сообщение". В первый запрос случайно попал заголовок плана (id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra ) В столбце possible_keys я запятые заменил точками, т.к. они не экранировались ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 13:46:34 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38418854&tid=1835933]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 312ms |

| 0 / 0 |
