|
|
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В таблицах batch_to_urls и statistics_new по ~750 тыс. записей. В imported_data_parsed_new ~550 тыс. Данный запрос выполняется 13-14 секунд и выдает в результате 14 записей Методом проб выяснил что тормоз тут Код: sql 1. При Код: sql 1. , выдает около 750 тыс. записей за 0,005 с. Подскажите, пожалуйста, хорошие книги или статьи по оптимизации. Или каким образом можно улучшить время обработки такого запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 02:40:03 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. замените на Код: sql 1. Кстати, и изначально OR sn.revision IS NULL можно было безболезненно убрать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 08:51:55 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
К сожалению не помогло, время осталось тоже Код: sql 1. все таки нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 14:14:26 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
kageua, 1. лимит без ордера -- некузяво, нужен ли он вообше? 2. если спрашиваетет про скорость, по любому ВСЕГДА выдавайте ЕХПЛАИН на все показаные запросы 3. если спрашиваетет про скорость, по любому ВСЕГДА показывайте SHOW CREATE TABLE zzz для всех таблиц (особо стеснительные могут заменить названия колонок что бы ЦРУ не вычислило вас) 4. без #2 и #3 -- разговор безпредметный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:51:01 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
javajdbc, спасибо за ответ. Вот данные 1) Лимит нужен, так как обрабатывается в несколько приёмов - каждый раз максимум по 200 строк 2) EXPLAIN idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEbrefbatch_id,imported_data_id,batch_id_2batch_id4const3586091SIMPLEsnrefimported_data_and_batch_id,imported_data_idimported_data_and_batch_id4test_db.b.imported_data_id11SIMPLEieq_refPRIMARYPRIMARY4test_db.b.imported_data_id1Using where 3) imported_data_parsed_new Код: 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. statistics_new Код: 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. batch_to_urls Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 19:30:28 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
kageua, 1. сколько получается? select count(1) from statistics where revision is null 2. чёй-то мне не нравится порядок подключения таблиц. попробуйте Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 22:14:09 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
javajdbc, 1) Код: sql 1. Результат 0 строк. NULL получается при LEFT JOIN этой таблицы 2) Время не поменялось, +/- 0,1 с EXPLAIN почти тот же idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEbrefbatch_id,imported_data_id,batch_id_2batch_id_24const3102881SIMPLEsnrefimported_data_and_batch_id,imported_data_idimported_data_and_batch_id4test_db.b.imported_data_id11SIMPLEieq_refPRIMARYPRIMARY4test_db.b.imported_data_id1Using where Может профилирование что то прояснит? starting0.000021Waiting for query cache lock0.000007checking query cache for query0.000056checking permissions0.000007checking permissions0.000005checking permissions0.000006Opening tables0.000035System lock0.000011Waiting for query cache lock0.000033init0.000025optimizing0.000020statistics0.001094preparing0.000022executing0.000006Sending data9.307438end0.000027query end0.000011closing tables0.000019freeing items0.000020Waiting for query cache lock0.000008freeing items0.000031Waiting for query cache lock0.000009freeing items0.000010storing result in query cache0.000039logging slow query0.000007cleaning up0.000008 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 22:54:03 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
kageua, 1. либо что-то не так, либо одно из двух! (С, Следствие ведут колобки) С какой стати, имея заданый прямой жоин, база упорно дает порядок подсоединения B, SN, I ???? Вы точно поставили STRAIGHT_JOIN ? 2. скорости и експлеин (внимательно где простой а где лефт жоин): Код: sql 1. 2. 3. 4. 5. 6. и отдельно: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 23:50:02 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
kageua, Sending data 9.307438 ничего интересного --- это стандартный стейт для чтения, сборки и посылки результата ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 23:52:59 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
javajdbc, 1) Наверное что то перепутал - попробовал сейчас, порядок как вы сказали idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEbrefbatch_id,imported_data_id,batch_id_2batch_id4const3507701SIMPLEieq_refPRIMARYPRIMARY4test_db.b.imported_data_id11SIMPLEsnrefimported_data_and_batch_id,imported_data_idimported_data_and_batch_id4test_db.b.imported_data_id1Using where 2) 9.7743 сек. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEbrefbatch_id,imported_data_id,batch_id_2batch_id4const3621191SIMPLEsnrefimported_data_and_batch_id,imported_data_idimported_data_and_batch_id4test_db.b.imported_data_id1Using where1SIMPLEieq_refPRIMARYPRIMARY4test_db.sn.imported_data_id1Using where 9.6673 сек. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEbrefbatch_id,imported_data_id,batch_id_2batch_id4const3809561SIMPLEieq_refPRIMARYPRIMARY4test_db.b.imported_data_id11SIMPLEsnrefimported_data_and_batch_id,imported_data_idimported_data_and_batch_id4test_db.b.imported_data_id1Using where, Not exists Первоначально, в imported_data_parsed_new revision был varchar(4) В statistics_new tinyint(4) Результат был 13-14 с секунд После того, как поставил оба unsigned tinyint(3), результат стал 10-11 секунд Могут ли быть какие то серъёзные изменения, при добавлении ключей и т.п.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 23:59:36 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
kageua, 1. у вас нет ПРИМАРИ КЕЙ на таблице batch_to_urls. Хорошо ли это? 2. если никаких подвохов со стороны базы, то похоже что перебор трети милионов записей в 3 таблица на вашем железе таки занимает 10 секунд. 3. попробуем зайти сбоку. Проверьте , скорость и експлейн и сколько записей ??? : Код: sql 1. 2. 3. 4. 5. 6. 4. если скорость меньше 5 секунд и записей меньше 10 тысяч, то имеет смысл развить эту тему -- подключить batch_to_urls как третью таблицу а не как первую. 5. мне понравилось как анти-жоинт высветился как NOT EXISTS в EXPLАIN-EXTRA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:03:06 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
javajdbc, 1) batch_to_urls это просто соединительная таблица, для соединения 3 других таблиц. Состоит просто из 3 полей, которые PRIMARY в своих таблицах. 2) Сайт сейчас находится на Amazon EC2 t2.micro. Виртуально одно ядро процессора Intel Xeon 2,5 Ghz с 1 GB памяти. Возможно памяти и маловато 3) 6.2744 сек. - 16 записей (первоначальный запрос выдаёт 14 записей - 10 от <> и 4 IS NULL) idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEiALLNULLNULLNULLNULL7910681SIMPLEsnrefimported_data_and_batch_id,imported_data_idimported_data_and_batch_id4test_db.i.imported_data_id1Using where 4) При подключении через обычный JOIN batch_to_urls, получил SELECT i.imported_data_id FROM imported_data_parsed_new AS i LEFT JOIN statistics_new AS sn ON i.imported_data_id = sn.imported_data_id JOIN batch_to_urls AS b ON b.imported_data_id = i.imported_data_id AND b.batch_id =1 WHERE i.revision <> sn.revision OR sn.revision IS NULL 6.6725 сек. idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEbrefbatch_id,imported_data_id,batch_id_2batch_id_24const367267Using index1SIMPLEieq_refPRIMARYPRIMARY4test_db.b.imported_data_id11SIMPLEsnrefimported_data_and_batch_id,imported_data_idimported_data_and_batch_id4test_db.i.imported_data_id1Using where Если же в SELECT указать все нужные поля, то приходим опять к 9.8 секунд Ещё один вопрос - в statistics_new revision указан, как ключ, в imported_data_parsed_new такого нет Может индексирование во второй таблице улучшить время? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 12:06:26 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
kageua, 1. если устраивает 6 секунд, то подсоединить бач-2-урл просто: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 2. Примари-Кей -- на всякий случай поэкспериментируйте -- добавьте его и посмотрите снова на скорость исходного СКЛа. 3. добавьте ключ на STATISTICS_NEW KEY `imported_data_id_revision` (imported_data_id,revision), Посмотрите ускорится ли базовый 6 секундный СКЛ 4. по логике, может ли в СТАТАТИСТИК_НЮ быть больше одной записи для imported_data_id ? Есле НЕ может быть больше одной, то попробуйте: Код: sql 1. 2. 3. 4. 5. 6. 7. 5. по логике базы, какой смысл имеет batch_id в таблице СН и в таблице Б2У ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 18:08:46 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
javajdbc, 1) По времени этот запрос не отличается от исходного. Но что странно на другой базе это заняло вообще около 2 минут. Так что остановлюсь на первом варианте, он быстрее исходного и работает и там и там 2) Время не поменялось 3) Время не поменялось 4) Да, такое возможно 5) Смысл один и тот же, это ключ в таблице batches ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 12:33:48 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
kageua, для очистки совести, проверьте скорости таких СКЛ: Код: sql 1. 2. 3. 4. 5. 6. 7. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 17:46:18 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38716304&tid=1834373]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 316ms |

| 0 / 0 |
