
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
03.10.2013, 09:59:02
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
Привет, есть вот такой запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Можно что-то сделать чтобы выполнялся немножко быстрее? На данный момент 160 секунд он работает (Таблица fh_file = 2 492 909 записей, fh_user_file = 3 392 876) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 10:03:50
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
ошибка в запросе Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 10:12:25
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
В исправленном варианте 140 секунд Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. C EXISTS 53 секунды Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 10:15:02
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
EXPLAIN с EXISTS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 10:30:17
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
Hett, Модератор: поправил, заменил запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 10:30:41
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
спасибо за рефакторинг темы :) Есть возможность перенести этот запрос на слейв, но если его можно заставить работать секунд за 5-10, то лучше оставить на мастере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 17:04:42
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
Hett, Ну для начала.... в варианте с ехистс, скорее всего не нужнен ДИСТИНКТ и не нужны ЛИМИТ 1 Да и внутру ИФ ЕХИСТС вместо СЕЛЕКТ * можно написать СЕЛЕЦТ 1 или даже СЕЛЕКТ НУЛЛ.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 17:20:41
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
...и еше: у вас два отдельных селекта для ЕХИСТС и НОТ ЕХИСТС. Оба хорошо работают по индексу user_file_file. другие условия, похоже , пока не работают. Попробуйте схлопнуть обе проверки в одну. Второй вариант -- ускорить отдельные ЕХИСТС / НОТ ЕХИСТС за счет более сложных индксов (Филе_ид , какойнибудь_флаг) и даже разбить OR в отдельнуй ЕХИСТС.... Мне кажется схлопывание (первый варинат) будет быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 18:07:15
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
а ЗАЧЕМ для запроса SELECT DISTINCT f.id впендюрили LEFT JOIN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 19:21:30
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
ScareCrowа ЗАЧЕМ для запроса SELECT DISTINCT f.id впендюрили LEFT JOIN? подумайте еше, мне не удобно вам подсказывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 20:48:36
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
а вы не стесняйтесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 21:24:39
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
ScareCrow, лефт_жоинт там как анти-жоинт, с условием WHERE ... AND uf.id IS NULL Ну а дистинкт стоит против умножения на втором жоинте с UF2. Вроде как с ексизстами получается быстрее но и первый вариант вполне функционально верен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.10.2013, 21:45:32
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
авторВроде как с ексизстами получается быстрее но и первый вариант вполне функционально верен как гарантированно нагнуть сервер, да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 08:03:56
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
javajdbcв варианте с ехистс, скорее всего не нужнен ДИСТИНКТ и не нужны ЛИМИТ 1 Да и внутру ИФ ЕХИСТС вместо СЕЛЕКТ * можно написать СЕЛЕЦТ 1 или даже СЕЛЕКТ НУЛЛ.... Дистинкт конечно да, лишний, а вот на счет лимита, - я как-то раз в подобный запрос решил попробовать добавить LIMIT 1 и он в пару раз быстрее заработал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 08:20:25
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
Hettjavajdbcв варианте с ехистс, скорее всего не нужнен ДИСТИНКТ и не нужны ЛИМИТ 1 Да и внутру ИФ ЕХИСТС вместо СЕЛЕКТ * можно написать СЕЛЕЦТ 1 или даже СЕЛЕКТ НУЛЛ.... Дистинкт конечно да, лишний, а вот на счет лимита, - я как-то раз в подобный запрос решил попробовать добавить LIMIT 1 и он в пару раз быстрее заработал. 1. У вас есть прекрасная возможность за 2-3 минуты проверить это заново прямо на этом запросе 2. >> Таблица fh_file = 2 492 909 записей, fh_user_file = 3 392 876 А сколько конкретно вылезет по запросу? Для проверки сделайте: select count(id) from ( SELECT f.id FROM fh_file f WHERE f.flag IS NULL /* != deleted */ AND EXISTS ( SELECT * FROM ........ поставьте сюда весь болшой селект ) Так вы поймете сколько времени уходит на передачу результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 08:52:37
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
javajdbcА сколько конкретно вылезет по запросу? Сейчас накопилось около 50 тысяч, а вообще в зависимости от частоты сбора этого "мусора", несколько тысяч в день. Попробовал объединить условия Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Но он вешается так совсем, в экслейне показывает 1PRIMARYfrefIX_file_flagIX_file_flag2const1123777100Using where; Using index2DEPENDENT SUBQUERYufALLFK_user_file_file,IX_user_file_abuse_status(null)(null)(null)3352245100Range checked for each record (index map: 0x82) Без этого OR (для примера, выполняется 47 секунд) 1PRIMARYfrefIX_file_flagIX_file_flag2const1123777100Using where; Using index2DEPENDENT SUBQUERYufrefFK_user_file_file,IDX_fh_user_file_deleted,IX_user_file_abuse_statusFK_user_file_file5db.f.id1100Using where Есть индекс INDEX IX_user_file_abuse_status (file_id, deleted, abuse_status, date_updated), но что-то ему не нравится он ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 09:08:53
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
64 секунды, но по крайней мере такой вариант мне кажется более адекватным чем первоначальный Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 09:15:26
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
Для варианта с OR еще вот такие индексы пробовал, но толку мало 1PRIMARYfrefIX_file_flagIX_file_flag2const1123777100Using where; Using index2DEPENDENT SUBQUERYufindex_mergeFK_user_file_file,IDX_fh_user_file,IX_user_file_abuse_status,IDX_fh_user_file2IDX_fh_user_file_deleted,IX_user_file_date_updated1,4(null)2189248100Using sort_union(IDX_fh_user_file_deleted,IX_user_file_date_updated); Range checked for each record (index map: 0x382) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 09:25:16
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
SELECT * FROM или SELECT 1 FROM в эзисте на практике ничего не дают, видимо оптимизатор изначально понимает это как и в случае с COUNT(*) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 09:39:48
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
не пойму почему не хочет в подзапросах использовать другие индексы, к примеру (file_id, deleted, abuse_status) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 15:28:27
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
Hett, как вариант -- отрабатывайте подзапрос в ехисте отдельно, на одном ИД (вернее на одном, потом на другом, брать из начала-середины-конца разброса ИД) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2013, 15:33:42
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
будьте внимательны: ....AND.... OR.... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. на всякий случай надо сделать еше одни кавычки: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. иначе AND пройдет первый а потом ОР ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.10.2013, 14:30:25
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
javajdbcна всякий случай надо сделать еше одни кавычки: Код: sql 1. 2. Получается даже не на всякий случай, а обязательно, походу поэтому и запрос так тормозил :) С экзистом и юнион, - чем меньше данных остается, тем быстрее выполняется запрос. А что вообще за состояние Send data, куда что отправляется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.10.2013, 15:25:34
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
Hett, http://stackoverflow.com/questions/3638624/mysql-profiler-sending-data http://dev.mysql.com/doc/refman/5.0/en/general-thread-states.html т.е. сендинг дата -- чтение данных с диска, обработака и отправка данных клиенту -- все вместе! оберните запрос в каунт и оттрейсите профайл снова: select count(id) form ( большой запрос ) таким образом уберете время передачи большого количества данных --- т.е. поймете конкретно скорость самого запроса без времени доставки результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.10.2013, 15:58:56
|
|||
|---|---|---|---|
Оптимизация запроса |
|||
|
#18+
javajdbcHett, http://stackoverflow.com/questions/3638624/mysql-profiler-sending-data http://dev.mysql.com/doc/refman/5.0/en/general-thread-states.html т.е. сендинг дата -- чтение данных с диска, обработака и отправка данных клиенту -- все вместе! оберните запрос в каунт и оттрейсите профайл снова: select count(id) form ( большой запрос ) таким образом уберете время передачи большого количества данных --- т.е. поймете конкретно скорость самого запроса без времени доставки результата. Да такое же время и показывает :) Доставка это разве не WRITE TO NET? Что-то я найти не могу в офф. доке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&tablet=1&tid=1835932]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 211ms |
| total: | 365ms |

| 0 / 0 |
