|
|
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть 3 таблицы, table1 размер - 2 149 114 строк, table2 - 92 221 527 строк, table3 – статична. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Видно сколько в каждой таблице row. UPDATE и INSERT нормально вроде работают, а вот запрос вот такой не могу оптимизировать что бы быстро выводил данные: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Время выполнения запроса примерно 10-20 минут. Конфиг mysql: key_buffer_size = 254M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 32M net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K innodb_data_file_path = ibdata1:10M:autoextend innodb_buffer_pool_size = 1536M innodb_log_file_size = 512M innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 2 innodb_lock_wait_timeout = 70 Как можно увеличить скорость запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 12:43:03 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
system30101Видно сколько в каждой таблице row.auto_increment <> количество записей. Ну да ладно, будем считать, что удалений и сбившихся вставок было мало (а с самим автоинкрементом никто не игрался), и записей там примерно столько. Но Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. miksoftА за поля, которых нет в группировке, но есть в секциях SELECT и ORDER BY, пожалуй, в аду скоро отдельный котел организуют.И вообще, где explain? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 12:51:11 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
system30101, У вас в секциях SELECT и ORDER BY используются поля, которых нет в GROUP BY и которые не "обернуты" агрегатными функциями. Вы в курсе, к чему это может привести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 12:52:43 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
авторВы в курсе, к чему это может привести к тормозам, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 14:59:34 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
походу быстрее человек на марс долетит чем мы дождёмся эксплейна от ТС ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 15:01:28 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 16:56:03 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
план с виду нормальный, но 142к (максимум) обрабатываемых промежуточных записей - и 20 минут? попробуйте всё-таки правильный групбай написать, может, быстрее станет :) кстати, а зачем группировать (и выводить) table3.` ct5`, если оно по условию равно 6? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 17:04:29 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
tanglirплан с виду нормальный, но 142к (максимум) обрабатываемых промежуточных записей - и 20 минут? попробуйте всё-таки правильный групбай написать, может, быстрее станет :) кстати, а зачем группировать (и выводить) table3.` ct5`, если оно по условию равно 6? врятли это на чтото влияет сдесь существенно, ну да ладно. другое дело сортировка! сколько там записей в выводе??? посмотрите как измениться время без сортировки, если сильно упадёт, то вопрос собственно про оптимизацию отпадает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 17:47:52 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
Разница в запросах было: 535.457 секунд стало: 494.082 секунд при запросе: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 20:42:53 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, строк в запросе как правило меньше 100, но можно поставить LIMIT 10, но всё равно скорости не добавляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 20:45:02 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
system30101.... Как можно увеличить скорость запроса? 1. преагрегацией 2. купить ССД, памяти и выделенку 3. уважить эстетов Танглира и Миксофта -- поставьте МАХ() на все незаагрегировные поля, которые не входят в ГРОУП БУ. 4. Проанализоровать задачу -- может уменьшить запрашиваемый период 5. добавить индексов чтоб хватило на селект 6. проанализоровать данные, может индексы уникальные? тогда лучше иностраный ключ поставить на ИД... 7. чем вас не устраивает 20 минут? поставьте на ночь :-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 06:32:09 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
javajdbcдобавить индексов чтоб хватило на селектсудя по эксплейну, нужные индексы есть и используются javajdbcиностраный ключперевожу - имелся в виду foreign key :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 08:28:44 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
system30101alex564657498765453, строк в запросе как правило меньше 100, но можно поставить LIMIT 10, но всё равно скорости не добавляет. я имел ввиду именно 100 - лимит ничего не даёт, всеравно 100 строк надо сортировать, я просто хотел убедиться что не 10000 000 сортируеться.. а вопрос второй, если без групировки брать - сколько строк получиться??? просто мыж понимаем что select sum(f) from table если в таблице 100 строк или 100 000 000 - то время будет очень разным, и никакой индекс сдесь не поможет. самое медленное действие это чтение с шдд. если ещо удачно лежат 100 000 000 строк так, что ни какие две записи не лежат в одной странице(не могут быть щитаны за одно атомарное (чтение одного кластера) обращение) - то это будет 100 лямов атомарных чтений, и если єто 0,1 милисекунда(ссд диск оптимистично) то подтребуеться на перечитывание этого дела 10 000 секунд, типо три часа. и тут хоть что делай, выше не прыгнешь. - дык сколько записей в групировку идёт??? (у тя не ссд диск полагаю, там время чтения от пары мс до 10мс) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 11:03:55 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
tanglirjavajdbcдобавить индексов чтоб хватило на селектсудя по эксплейну, нужные индексы есть и используютсяточно не хватает ALTER table1 ADD KEY `ct4_ct1_idx` (CT4,CT1); покрывающие индексы... скорее всего, не помогут, хотя тоже можно попробовать, зависит от селективности t2.ct1 и (t3.c5,t3.c4) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 11:50:32 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
Cygapb-007tanglirпропущено... судя по эксплейну, нужные индексы есть и используютсяточно не хватает ALTER table1 ADD KEY `ct4_ct1_idx` (CT4,CT1); покрывающие индексы... скорее всего, не помогут, хотя тоже можно попробовать, зависит от селективности t2.ct1 и (t3.c5,t3.c4) кстати, у меня возникла непонятная идея: а что если придумать синтакс выборке по индексу. Точнее разрешить (с некими ограничениями) использовать имя индекса в FROM секции Это будет функционально совпадать с случаем Using index в Ехтра секции Експлейна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 18:37:03 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
автора что если придумать синтакс выборке по индексу. Точнее разрешить (с некими ограничениями) использовать имя индекса в FROM секции доку почитайте наконец. в части FORCE INDEX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 19:11:27 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
ScareCrowавтора что если придумать синтакс выборке по индексу. Точнее разрешить (с некими ограничениями) использовать имя индекса в FROM секции доку почитайте наконец. в части FORCE INDEX да про форсе-индех -- это то понятно. Мне интересно что мешает использовать индекс как отлично организованое материалайзед-вью (кроме отсутсвия синтакса) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 19:32:15 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
javajdbcScareCrowпропущено... доку почитайте наконец. в части FORCE INDEX да про форсе-индех -- это то понятно. Мне интересно что мешает использовать индекс как отлично организованое материалайзед-вью (кроме отсутсвия синтакса) ничего не мешает. все пользуются. "покрывающий индекс" называется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 19:38:13 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
ScareCrow, спасибо за разяснение прописных истин. Но вопрос был не в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 20:13:46 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
javajdbc, ваши голоса в голове говорят для меня загадками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2014, 00:06:03 |
|
||
|
Огромная mysql база, оптимизировать SELECT
|
|||
|---|---|---|---|
|
#18+
javajdbcкстати, у меня возникла непонятная идея: а что если придумать синтакс выборке по индексу. Точнее разрешить (с некими ограничениями) использовать имя индекса в FROM секции Это будет функционально совпадать с случаем Using index в Ехтра секции Експлейна.пофантазирую тоже малость, попредметнее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И какой в этом смысл? Индекс создаем сами, явно его указываем в запросе вместо таблицы (чтобы добиться в Extra строки Using index) При этом мы выполняем (теоретически) вместо компилятора анализ статистики и навязываем своё вИдение оптимального выполнения запроса. Так ведь и сейчас никто не запрещает использовать для этого FROM table1 t1 USE KEY(IX_ct4_ct1) . Прямой выгоды 0, ятд, потому как при наличии индекса компилятор и сам в состоянии построить оптимальный план выполнения. Другое дело, если бы сервер подсказал, что для более оптимального выполнения запроса с учетом имеющейся статистики было бы неплохо построить вот такой индекс, дал бы его описание, ну, и оценил бы в процентах повышение эффективности обработки с учетом нового индекса. MS SQL это умеет, MySQL - хз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2014, 00:47:24 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38703252&tid=1834470]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 362ms |

| 0 / 0 |
