|
|
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
есть такая таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Выполняю 2 запроса и вижу дикую разницу по времени: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. теперь смотрим explain: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. подскажите, откуда такая разница? как это можно оптимизировать? почему же select max(),id выполняется в тысячи раз медленнее, чем select max() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 18:11:45 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 18:17:15 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
rows null и rows 47917900 ни о чем не говорят? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 18:51:11 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. ну и вот этот запрос кривой как бумеранг. в другой СУБД он бы вообще не выполнился, отвалился бы с ошибкой синтаксиса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 18:54:10 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
так а почему он начинает перебирать, если в select добавилось только поле mid? в чем принципиальное отличие? оба поля есть в индексе ведь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 18:54:32 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
Pilsenтак а почему он начинает перебирать, если в select добавилось только поле mid? в чем принципиальное отличие? оба поля есть в индексе ведь ага 47917900 раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 18:57:30 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
Pilsenтак а почему он начинает перебирать, если в select добавилось только поле mid? в чем принципиальное отличие? оба поля есть в индексе ведьОтличие в том, что него кривая логика - в секции SELECT смесь из просто полей и агрегатных функций при отсутствии группировки. А оптимизатор не обязан хорошо справляться с кривыми запросами, он и с прямыми иногда ошибается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 19:02:21 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
miksoft, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 19:07:46 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
Pilsen, Кстати, а попробуйте так: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 19:17:10 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
да, сработало. тоже "Select tables optimized away" интересно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 19:37:37 |
|
||
|
Почему select max(id),id на порядок дольше, чем select max(id) ?
|
|||
|---|---|---|---|
|
#18+
создание правильного запроса - с приписыванием гроупбай ничего не меняет. всёравно мускл будет получать набор, и по нему проводить агрегацию. а вот если только агрегирующие функции, он таки да, понимает что можно на индексном дереве получить результат. ЗЫ у меня таблица на 14млн записей. есть составной индекс. и отдельный. все варианты приведёных сдесь запросов выполняються за 31-36мс (использовал игнор кеша) таблица иннодб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 12:24:49 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38660628&tid=1834723]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 359ms |

| 0 / 0 |
