|
|
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Как можно оптимизировать запрос? С индексами что можно сделать? Запрос занимает 5-6 секунд. В таблице report более 4 млн. записей. В остальных таблицах не более 20-и. Насколько я понимаю Using temporary; Using filesort указывает на какую-то проблему. -- -------------------------------------------------------- -- Server version: 5.1.69 - Source distribution -- -------------------------------------------------------- Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. Я прикрепил файл с EXPLAIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 17:25:28 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
сделай индексы по полям джойнов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:06:17 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
Я фигею без баяна... Код: sql 1. и связывание уже INNER, а ни фига не LEFT... Код: sql 1. ещё одно... Код: sql 1. и ещё... Код: sql 1. По первичному индексу, ага... Тут нечего оптимизировать. Надо всё удалить и начать заново. С нуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:13:25 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
Akina[/src]и ещё... Код: sql 1. По первичному индексу, ага...Зато нет проблем с тем, что выбираются поля, не входящие в группировку и без группирующей функции :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 19:43:36 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
спасибо. Переделал запрос, исправил на INNER где можно было. В event_properties может не быть соответств. записи, поэтому LEFT JOIN. Добавил индекс по drupal_field_user_identifier.field_user_identifier_value. По остальным полям есть индексы. 1648 - переменная, если делаю отдельный индех по r.facility_id и r.type - это наоборот замедляет. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. GROUP BY r.id мне нужно на тот случай если будет несколько записей в event_properties. прикрепил файл с EXPLAIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 19:50:29 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
stupor Код: sql 1. Вот оно тут нахрена? особенно с учётом того, что у тебя НЕТ лимита... stuporGROUP BY r.id мне нужно на тот случай если будет несколько записей в event_properties. И в этом случае тебя устроит любое из event_properties.severity... а тогда ты уверен, что оно тебе вообще нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 21:08:05 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
Akinastupor Код: sql 1. Вот оно тут нахрена? особенно с учётом того, что у тебя НЕТ лимита...а почему бы и нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 21:29:01 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
Akina, LIMIT есть, просто я его в EXPLAIN не вставлял. event_properties.severity может быть несколько, и поэтому без GROUP BY r.id будет несколько одинаковых записей из report ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 22:04:18 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
stuporLIMIT есть, просто я его в EXPLAIN не вставлял.А вот это зря. Запросы с LIMIT-ом и без - разные запросы и у них может быть разные и план, и время выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 22:10:22 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
stuporevent_properties.severity может быть несколько, и поэтому без GROUP BY r.id будет несколько одинаковых записей из report То есть вы можете гарантировать, что для каждого r.id они все и всегда будут одинаковыми? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 07:20:15 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
stuporAkina, LIMIT есть, просто я его в EXPLAIN не вставлял. event_properties.severity может быть несколько, и поэтому без GROUP BY r.id будет несколько одинаковых записей из report мужик, тогда вставь в EXPLAIN сразу запрос SELECT 42; и у тебя стазу классный план там покажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 10:32:12 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
tanglir, я имел ввиду, что одна и та же запись может несколько раз выбраться. Из-за LEFT JOIN. Хотя, я подумал, такой вариант вряд ли возможен, и можно действительно убрать GROUP BY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 18:32:05 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
убрал GROUP BY r.id. Вот то что осталось: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. запрос бежит гораздо быстрее, но все равно осталолись Using temporary; Using filesort ; как я понимаю это указывает на то, что mysql делает временный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2014, 14:34:20 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
stuporкак я понимаю это указывает на то, что mysql делает временный индекс.Это значит, что, поскольку по этому выражению Код: sql 1. нет и не может быть индекса, серверу приходится выбирать всё, что подходит под условия в where, после чего сортировать результат. Т.е. сортировка происходит не "сразу" в процессе чтения данных, а отдельным этапом. И если вам принципиально важна именно такая сортировка, то оптимизировать тут, похоже, уже нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 06:05:58 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
tanglir, я убрал event_severity из SELECT полей и ORDER BY, но Using temporary; Using filesort остались. Скорее всего это что-то другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 19:23:06 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
stupor, Код: sql 1. Вот это делает невозможным использование любого индекса. MySQL не умеет использовать индекс для сортировки, если одно поле ASC, а другое - DESC (даже если event_severity и r.id - это поля одной таблицы ). я бы упрощал запрос. возможно, часть логики есть смысл отдать приложению. два-три простых, но хороших запроса будут лучше, чем один сложный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 20:20:35 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
авторMySQL не умеет использовать индекс для сортировки, если одно поле ASC, а другое - DESC (даже если event_severity и r.id - это поля одной таблицы ). а MySql об этом знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 23:18:53 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
ScareCrow а MySql об этом знает? А Вы внимательно на EXPLAIN посмотрите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 23:28:15 |
|
||
|
Нужна помощь с индексами.
|
|||
|---|---|---|---|
|
#18+
ребята, спасибо за помощь! как я уже сказал, я убрал event_severity (для поиска проблемы). Вот как запрос выглядит сейчас: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. присоединяю explain ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 18:46:00 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1835295]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 381ms |

| 0 / 0 |
