|
|
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
Доброго дня всем! Подскажите пожалуйста какое-то решение возникшей проблемы. Есть запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. При изменении параметров в BETWEEN (т.е. когда запроса не оказывается в кэше запросов) запрос подвисает секунд на тридцать. Профилирование показывает что он висит на стадии copying to tmp table Подскажите пожалуйста в чём косяк? Другие запросы (а их много) не тормозят. Вычитал что проблема может быть в слишком большом кол-ве индексов. Если так то объясните пожалуйста где, в запросе или в таблицах? OS: FreeBSD 9.2 amd64 MySQL: 5.5.32 my.cnf Код: plaintext 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. Структура таблиц crm_org_sch_data Код: 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. crm_org_sch_keys Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. crm_org_sch_keys_row Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. У таблиц связи по внешним ключам: *.sessID --> На таблицу crm_sessions , за ненадобностью её структуру тут не привожу crm_org_sch_keys_row.keyID ---> crm_org_sch_keys.id crm_org_sch_keys_row.dataID ---> crm_org_sch_data.id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 13:30:16 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
Гуляев Гоша, план запроса покажите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 13:49:37 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
авторПодскажите пожалуйста в чём косяк? "косяк" в том, что запрос твой г. избавляться нужно от GROUP BY "палюбасу" так пробуй Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 13:49:55 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
miksoft , вот план запроса только уже который предложил Гость112 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Guest112 это изменение очень сократило время работы. Теперь он просит 5 сек и в профилировании никуда не упирается. Можно ли ещё как-то ускорить запрос? Guest112 отдельное спасибо за эту конструкцию, я о таком и не знал, теперь благодаря тебе арсенал знаний пополнен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 14:21:18 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
Гуляев ГошаМожно ли ещё как-то ускорить запрос? а попробуйте ещё такой запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. вроде эквивалентный ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 15:25:07 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
qwerty112 , спасибо огромное! Снимаю шляпу. Не видя задачи дать последовательно без лишних расспросов два ответа улучшающих друг друга, это в моём представлении примерно как гадать по смске :) Твой последний вариант просто работает без тормозов вне зависимости от закешированного запроса. Смысл запроса вполне понятен, непонятно пока только каким образом достичь такого уровня мастерства чтобы вот так запросто безошибочно выдавать такие решения :) Огромное спасибо! Как говорят в саус парке: "Сегодня мы много поняли" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 20:38:29 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
Помогите, пожалуйста, по возможности и с моим запросом: Код: sql 1. 2. 3. 4. 5. Профилирование показывает что он висит на стадии copying to tmp table Подскажите, пожалуйста, как поправить запрос? Другие запросы (а их много) не тормозят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 06:03:45 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 09:12:16 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
Сегодня столкнулся с аналогичной проблемой, уже попытался JOIN заменить на неявный (т.к. анализ показал что так быстрее), но все равно на большой выборке очень большое время занимает копирование в темповую таблицу. Привожу последний вариант запроса и надеюсь, что кто-нибудь поможет с его модернизацией для ускорения. Все дополнительные данные по запросу могу выложить дополнительно. Вот собственно сам запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 13:13:38 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
vas-e-naJOIN заменить на неявный (т.к. анализ показал что так быстрее)Вашему анализу показалось. А вот что он забыл показать - так это то, что на разных версиях MySQL можно получить разный результат или даже синтаксическую ошибку на ровном месте. Правда, такие версии вроде бы уже вышли из обращения, но зарекаться я бы не стал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 13:19:23 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
vas-e-na Код: plsql 1. Поясните логику этого фрагмента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 13:21:01 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
miksoft, оно иднт в такой связке: Код: plsql 1. 2. смысл в том чтобы был опубликован и родительский и дочерний товар, при его наличии (дочернего) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 13:23:03 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
vas-e-na, План запроса и DDL таблиц со всеми индексами покажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 13:30:35 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
miksoft, Я так понял это нужно: Код: plsql 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. 45. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Как-то так: id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE parameter ALL PRIMARY parameter_parametertype_id NULL NULL NULL 646 Using where; Using temporary; Using filesort1 SIMPLE cargoparameter ref cargoparameter_cargo_id cargoparameter_parameter_i... cargoparameter_parameter_id 5 test.parameter.parameter_id 27 Using where1 SIMPLE cargo index_merge PRIMARY cargo_category_id cargo_publish cargo_category_id cargo_publish 5;1 NULL 35 Using intersect(cargo_category_id cargo_publish); ...1 SIMPLE child ref cargo_parent_id cargo_parent_id 5 test.cargo.cargo_id 2893 Using where ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 14:20:19 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
Ребят, есть идеи??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 16:29:21 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
vas-e-na Код: plsql 1. вот это, по-моему, вообще "не в дугу" вам 2 раза нужно параметры цеплять - один раз к карго, второй к чайлдам а как есть - это вообще хрен пойми что получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 17:31:53 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
tanglir, В общем пока решил проблему так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Но если кто-то подскажет как еще можно оптимизировать запрос буду рад PS tanglir, спасибо за подсказку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 10:31:14 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
vas-e-na, а зачем ЛЕФТ джойн с каргопараметрами в основном запросе, если потом эта таблица участвует в условиях экзист-запросов? у вас карго_ид могут быть нуллами? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 12:20:01 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
+Бредовая идея давать полям таблицы префикс, совпадающий с именем таблицы. Зачем писать одно и то же дважды? vas-e-naсмысл в том чтобы был опубликован и родительский и дочерний товар, при его наличии (дочернего)а в чём вообще смысл запроса? Выбрать все параметры, которые относятся к опубликованным товарам (определённой категории), у которых либо нет прямых потомков, либо есть {все|хотя бы один|?} опубликованный прямой потомок? к каждому параметру ещё вывести количество самих товаров. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 12:27:43 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
И вообще я, похоже, чего-то не понимаю. Зачем в запросе 2 абсолютно одинаковых экзиста? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 12:31:06 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
tanglir, tanglirа зачем ЛЕФТ джойн с каргопараметрами в основном запросе, если потом эта таблица участвует в условиях экзист-запросов? Не совсем понял вопроса tanglirу вас карго_ид могут быть нуллами? cargo.cargo_id - всегда не NULL child.cargo_id - может быть NULL tanglirВыбрать все параметры, которые относятся к опубликованным товарам (определённой категории), у которых либо нет прямых потомков, либо есть {все|хотя бы один|?} опубликованный прямой потомок? к каждому параметру ещё вывести количество самих товаров. Так? да tanglirИ вообще я, похоже, чего-то не понимаю. Зачем в запросе 2 абсолютно одинаковых экзиста? один на родиля условие, второй на ребенка условие. так что они немного разные. но если объединить в один exists с OR то будет выполнятся дольше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 13:21:02 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
vas-e-naтак что они немного разныеони совпадают с точностью до символа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. vas-e-natanglirВыбрать все параметры, которые относятся к опубликованным товарам (определённой категории), у которых либо нет прямых потомков, либо есть {все|хотя бы один|?} опубликованный прямой потомок? к каждому параметру ещё вывести количество самих товаров. Так?да-Приборы! -18! -Что "18"? -А что "приборы"? Если есть 2 потомка (не "сын" и "внук", а 2 "сына"), один опубликован, второй нет - это "правильный" товар? Если товар подходит по параметрам, а потомок не подходит - это "правильный" товар? Если товар подходит по параметрам, первый потомок подходит, а второй нет - это "правильный" товар? Ну и так далее :) Ставьте задачу чётко, решения могут сильно различаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 13:36:28 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
tanglirони совпадают с точностью до символаой только сейчас увидел, где разница прошу прощения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 13:40:09 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
tanglir, Соответсвенно поясню критерии отбора: Товары должны быть всегда опубликованы. (таблица cargo) В случае наличия детей хотя бы один ребенок должен быть опубликован (таблица child) Характеристика должна принадлежать либо к родительскому товару, либо к дочернему (у обоих не может быть одной одинаковой характеристики одновременно) Все доп фильтры типа категории применяются только к родительскому товару, т.к. по структуре дочерний их наследует (как и родительские характеристики) Учтите что это условия для данного конкретного запроса, в зависимости от ситуации критерии могут изменится, но суть останется той же: Найти характеристики которые есть у товаров попадающих под фильтр учитывая что дочернему товару соответсвуют характеристики родительского. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 15:20:30 |
|
||
|
MySQL тормозит на стадии "Copying to tmp table"
|
|||
|---|---|---|---|
|
#18+
сначала тупо найти все ид товаров, удовлетворяющих характеристике и попадающих под фильтр - безо всяких подзапросов на дочерние и т.п. потом из полученного списка ид товаров получить ид их родителей и таким же образом их отфильтровать потом UNION этих двух списков ид и подсчёт кол-ва товаров на характеристику будет ли это быстрее, чем 2 экзиста на каждую строку - вопрос, но попробовать имхо стоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 18:53:18 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38712899&tid=1834406]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 300ms |

| 0 / 0 |
