|
|
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
okuznetsovВ результате получились два запросамне кажется или это один и тот же запрос, только с изменённым порядком таблиц в джойне? okuznetsov 1) Также хотелось бы узнать можно ли что-то сделать и с этим запросом: Скорее всего нет. Ордер бай ранд() работает дубово: выбирается всё, подходящее под условие, для каждой записи генерируется рандом, результат сортируется. Учитывая, что сортировать надо практически всю таблицу (если ид у вас - ПК), то сортировка запросто может задействовать диск. Превед производительность. А запросы к инфо_схема и не обязаны быть быстрыми. Неужели вам требуется выполнять их N раз в секунду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 14:57:56 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
tanglirokuznetsovВ результате получились два запросамне кажется или это один и тот же запрос, только с изменённым порядком таблиц в джойне? okuznetsov 1) Также хотелось бы узнать можно ли что-то сделать и с этим запросом: Скорее всего нет. Ордер бай ранд() работает дубово: выбирается всё, подходящее под условие, для каждой записи генерируется рандом, результат сортируется. Учитывая, что сортировать надо практически всю таблицу (если ид у вас - ПК), то сортировка запросто может задействовать диск. Превед производительность. А запросы к инфо_схема и не обязаны быть быстрыми. Неужели вам требуется выполнять их N раз в секунду? 1) Именно так, один и тот же запрос, оформленный по разному. вроде бы по скорости одинаково выполняются. по стилю написания, т.е. хорошему тону какой соответствует? 2) а я думаю, что вариантом много как можно сделать, вплоть до тригеров и хранимых процедур. По поводу производительности, я в курсе, данный запрос создаёт существенную нагрузку на двухядерный процессор при большом числе пользователей на сайте, поэтому и занимаюсь его улучшением. Меня устраивает и следующий вариант реализации. Если вот таким образом сделать - это хорошее решение? авторSELECT * FROM game AS r1 JOIN ( SELECT (RAND() * (SELECT MAX(id) FROM game)) AS id ) AS r2 WHERE r1.id >= r2.id #ORDER BY r1.id ASC LIMIT 15; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 22:14:50 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
Расшифровка (на всякий случай): JOIN добавляет все ID который больше или равны нашему случайному значению и мы выбираем ближайшего соседа, если равенство не возможно. НО как только 15 строк найдено мы останавливаемся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 22:15:54 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
okuznetsovРасшифровка (на всякий случай): JOIN добавляет все ID который больше или равны нашему случайному значению и мы выбираем ближайшего соседа, если равенство не возможно. НО как только 15 строк найдено мы останавливаемся. идея хорошая, реализация нет. Поробуйте шаг за шагом: 1. заполучить максимально значение ИД Код: sql 1. 2. размножить сие значение 20 раз (с небольшим запасом на случайные повторения) Код: sql 1. 2. 3. 4. 5. 3. помножить на РАНД Код: sql 1. 2. 3. 4. 5. 4. выбрать наиближайшего реального соседа, допустим снизу Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 5 и выташить все поля нужных записей, снова отсортировать по ранд() и взять 15 случайных значений Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 22:43:31 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
А в чём плохая реализация заключается? По времени на моей таблице в 7 000 000 строк запрос стал выполняться достаточно быстро - в пределах от 0.040 - 0.080 сек, на порядок ускорился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 22:52:20 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
Вариант предложенный вами сейчас тоже изучу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 22:53:09 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
okuznetsovА в чём плохая реализация заключается? По времени на моей таблице в 7 000 000 строк запрос стал выполняться достаточно быстро - в пределах от 0.040 - 0.080 сек, на порядок ускорился. Ваш вариант выбирате 15 ид подряд начиная с некоторого случайного числа. Если это и есть ваше определение 15 случайных ИД -- то ок. Мой варинат -- 15 реально случайно разбросаных ид ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 23:02:07 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
javajdbcokuznetsovА в чём плохая реализация заключается? По времени на моей таблице в 7 000 000 строк запрос стал выполняться достаточно быстро - в пределах от 0.040 - 0.080 сек, на порядок ускорился. Ваш вариант выбирате 15 ид подряд начиная с некоторого случайного числа. Если это и есть ваше определение 15 случайных ИД -- то ок. Мой варинат -- 15 реально случайно разбросаных ид Ваш вариант заинтересовал меня своим решением, и я попробовал потестировал его, в результате заметил одну не очень хорошую закономерность - случайные ИД генерируются в достаточно приближённом районе от максимального ID и ни как не из середины таблицы и тем более её начала. Возможно это какое-то странное совпадение, но я запускал запрос на выполнение подряд несколько сотен раз и интервалом в среднем 0.5 секунды. В принципе меня устраивает и мой вариант, он хорош для меня как раз тем, что вытаскиваются подряд случайно рядом стоящие ИД, т.к. это есть одинаковые игры разных версий, а также похожие на рядом стоящие игры. Я так понял пока разбирался, что игры добавлялись в таблицу друг за дружкой сгруппированные по интересам и жанрам. Если с моим запросом всё в порядке тогда беру его) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 23:23:43 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
javajdbcokuznetsovА в чём плохая реализация заключается? По времени на моей таблице в 7 000 000 строк запрос стал выполняться достаточно быстро - в пределах от 0.040 - 0.080 сек, на порядок ускорился. Ваш вариант выбирате 15 ид подряд начиная с некоторого случайного числа. Если это и есть ваше определение 15 случайных ИД -- то ок. Мой варинат -- 15 реально случайно разбросаных ид Можете помочь мне вот с этим запросом разобраться? Я не знаю и не понимаю пока для чего и зачем он нужен, но он в моём списке медленных запросов mysql-slow.log: 2) И хотелось бы что-то сделать с запросом такого плана (primary key соответственно в данной таблице нет): авторselect ifnull(sum(data_length + index_length), 0) from information_schema.tables where table_schema = 'dbgwg'; выполняется в среднем около 0.5 сек в среднем бывают моменты когда более 1 секунды EXPLAIN EXTENDED следующий: 1 SIMPLE tables ALL TABLE_SCHEMA Using where; Open_full_table; Scanned 1 database ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 23:31:15 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
okuznetsovЯ не знаю и не понимаю пока для чего и зачем он нуженСчитает размер таблиц в схеме 'dbgwg'. По идее, чисто админская операция. okuznetsovв результате заметил одну не очень хорошую закономерность - случайные ИД генерируются в достаточно приближённом районе от максимального ID+1 Как-то странно ранд работает. Ради интереса покрутил на одной из своих таблиц. Макс. ид = 20000 (впрочем, реально там идшники только до 15000), есть пропуски. Код: sql 1. 2. 3. 4. 5. Так первой же строкой вылезаетidqweid<=qwe148164915.748075503620Это вообще *** как? если хэвингом эта строка должна была отсеяться в любом случае?? Впрочем, я проверял на старой версии - может, это какой-то известный баг и ТСу надо просто обновиться? Впрочем, если вычисление ранда вынести в "статику", то работает нормально: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 05:37:17 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
поправленный вами вариант, заработал, вижу стали генерироваться разные ИД, но скорость выполнения запроса упала в разы, на моей таблице составляет от 0.5 - 1 сек, это много. в том варианте который у javajdbc и менят- запрос выполняется от 0.040-0.100 сек. спасибо за объяснение "Считает размер таблиц в схеме 'dbgwg'. По идее, чисто админская операция." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 11:12:06 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
okuznetsovно скорость выполнения запроса упала в разычудеса, да и только а если по отдельности кусочки позапускать? даже не представляю, что именно там тормозить может... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 11:37:47 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
Кстати, вы несколько раз проверяли? у меня стабильно за 0,05с отрабатывает, только первый запуск был 0,2с. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 11:39:39 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
tanglirКстати, вы несколько раз проверяли? у меня стабильно за 0,05с отрабатывает, только первый запуск был 0,2с. по отдельности быстро работают, каждый выполняется не более чем за 0.040 секунд. а как вместе - я заснял для вас здесь - ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 12:14:03 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 12:16:24 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
okuznetsov, курсор мышки нужно было просто убрать:) и не чего не отрезалось бы:) заработался) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 12:17:32 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
okuznetsov, мда, хрень какая-то... сейчас проверил на тестовой таблице с 1М записей - по 5 секунд на запрос. В то же время если его превратить в Код: sql 1. 2. 3. 4. 5. или даже на такое (можно сказать, вообще тот же запрос, только "в лоб" написанный) Код: sql 1. 2. 3. 4. , то есть вручную подставить вычисленные границы в запрос, то выполняется моментально. WTF? Грешил на рандом, но попробовал вообще вытащить эти 20 идшников во временную таблицу - один хрен. "В лоб" работает, а обход "опорной" таблицы с 20 записями тупит беспощадно... Под спойлером - код. У кого есть мысли? Код: 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. Эксплейн. Вариант с темптаблицей хорош отсутствием кучи юнионовских строк. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1PRIMARYqweALL\N\N\N\N202DEPENDENT SUBQUERYtblindexPRIMARYPRIMARY4\N1118990Using where, Using index время выполнения стабильно около 4.7 секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 12:55:26 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
Мда. Тупо запустил 20 запросов по отдельности. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 13:04:54 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
tanglir, В порядке танцев с бубном - сделайте ANALYZE TABLE обеим таблицам. Какой движок получился у таблицы qwe? Что-нибудь изменится, если id <= qwe.id_ceil заменить на id < qwe.id_ceil ? Что-нибудь изменится, если создать индекс qwe (id_ceil) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 13:07:35 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
Более того. Код: sql 1. - 0,81сек. Стабильно. Код: sql 1. - 0сек. Стабильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 13:08:39 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
tanglirБолее того. Код: sql 1. - 0,81сек. Стабильно. Код: sql 1. - 0сек. Стабильно. Эпичненько... Планы? Точная версия MySQL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 13:09:57 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
miksoftВ порядке танцев с бубном - сделайте ANALYZE TABLE обеим таблицамдык это я первым делом после наполнения сделал miksoftКакой движок получился у таблицы qwe?инно miksoftЧто-нибудь изменится, если id <= qwe.id_ceil заменить на id < qwe.id_ceil ?нет miksoftЧто-нибудь изменится, если создать индекс qwe (id_ceil) ?Ну, в первой строке эксплейна появился "using index", а толку. Время то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 13:11:46 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
miksoftЭпичненько... Планы? Точная версия MySQL ? Код: sql 1. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEtblindex\NPRIMARY4\N1118990Using index Код: sql 1. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1PRIMARY\N\N\N\N\N\N\NNo tables used2SUBQUERY\N\N\N\N\N\N\NSelect tables optimized away 5.0.67-community-nt-log ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 13:19:45 |
|
||
|
Требуется помощь в оптимизации запроса
|
|||
|---|---|---|---|
|
#18+
tanglir5.0.67Хм... а ежели посвежее взять? Похоже, что недотумкивает оптимизатор, что в случае rand()*max(id) тоже можно Select tables optimized away. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 13:22:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38767599&tid=1832936]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 326ms |

| 0 / 0 |
