Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: можно улучшить запрос?
Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018
Помог: 2 раз(а)
Есть запрос, который сильно много берет по времени - тяжелый. Вроде и правильно прописан, но хотелось бы немного модернизивать. Есть куда его улучшать?
время срабатывания:
[56] => 0.011683940887451
SELECT s.id AS ids, s.torrent AS tid, t.name AS tname, t.free AS free, s.uploaded AS uploaded, s.downloaded, s.userid AS userid, u.username, u.class, u.uploaded AS upload, UNIX_TIMESTAMP()- UNIX_TIMESTAMP(s.last_action) AS last_action, s.seed_time AS st, s.mulct AS ls, u.enabled, s.finished FROM snatched AS s INNER JOIN users AS u ON u.id = s.userid
INNER JOIN torrents AS t ON t.id = s.torrent WHERE s.finished ='yes' AND s.mulct ='no' AND s.downloaded >0 AND u.enabled ='yes' ORDER BY userid
ищет по таблице юзверов(~1000) и взятых файлов (файлов ~1500). Эти две таблицы связаны по ID юзера, то-есть users.id = snatched.userid. Сортировку по userid если убрать, запрос будет еще больше времени обрабатываться, LEFT JOIN еще больше время показывает.
Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009 Откуда: Днепропетровск
Помог: 8 раз(а)
u.enabled = 'yes' поместить в условие джойна
убрать order by если он не принципиален, он увеличивает время, не знаю как с ним у вас быстрее
А так же индексы по полям которые участвуют в условиях ускорят ваш запрос
LIME
Отправлено: 19 Февраля, 2020 - 13:21:03
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
biperch пишет:
не знаю как с ним у вас быстрее
никак
ошибка замеров наверняка
biperch пишет:
А так же индексы по полям которые участвуют в условиях ускорят ваш запрос
тут один составной индекс по всем полям snatched которые участвуют в условиях
причем первыми пусть идут наиболее селективные и важно учесть ASC/DESC('yes', 'no' так себе значения если это строки), т.е. которых меньше в результате
Lolya пишет:
по таблице юзверов(~1000) и взятых файлов (файлов ~1500)
[49]=> 0.0070509910583496 [SELECT s.id AS ids, s.torrent AS tid, t.name AS tname, t.free AS free, s.uploaded AS uploaded, s.downloaded, s.userid AS userid, u.username, u.class, u.uploaded AS upload, UNIX_TIMESTAMP()- UNIX_TIMESTAMP(s.last_action) AS last_action, s.seed_time AS st, s.mulct AS ls, u.enabled, s.finished FROM snatched AS s INNER JOIN users AS u ON u.id = s.userid INNER JOIN torrents AS t ON t.id = s.torrent WHERE s.finished ='yes' AND s.mulct ='no' AND s.downloaded > 0]
[50]=> 0.0018861293792725 [SELECT s.id AS ids, s.torrent AS tid, t.name AS tname, t.free AS free, s.uploaded AS uploaded, s.downloaded, s.userid AS userid, u.username, u.class, u.uploaded AS upload, UNIX_TIMESTAMP()- UNIX_TIMESTAMP(s.last_action) AS last_action, s.seed_time AS st, s.mulct AS ls, u.enabled, s.finished FROM snatched AS s INNER JOIN users AS u ON u.id = s.userid INNER JOIN torrents AS t ON t.id = s.torrent WHERE s.finished ='no' AND s.seeder ='no' AND s.mulct ='no' AND s.downloaded >0]
Но хотелось бы, если возможно, на более шустрый вариант перевести.
Мелкий
Отправлено: 19 Февраля, 2020 - 15:29:03
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
И никто не спросил ни о какой СУБД вообще речь, ни где explain.
Что ж, и в каких именно попугаях измеряется это "много времени", впрочем, тоже.
----- PostgreSQL DBA
LIME
Отправлено: 19 Февраля, 2020 - 16:00:56
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
давай спросим. Мелкий какая принципиальная разница в данном случае о какой рсубд речь? Мелкий не все ли равно чему равен попугай, если задача тс уменьшить их количество несмотря ни на что?
0.007... и 0.001... вот такие цифры при колве записей < 2000 в обеих табличках
давай спросим Lolya это секунды? микросекунды? или сутки?
Мелкий
Отправлено: 19 Февраля, 2020 - 17:08:08
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
LIME пишет:
не все ли равно чему равен попугай, если задача тс уменьшить их количество несмотря ни на что?
Если это на уровне погрешности измерения - то уменьшать не имеет смысла.
Как раз исходя из объёма данных я предполагаю что это именно этот случай.
LIME пишет:
какая принципиальная разница в данном случае о какой рсубд речь?
Чтобы понимать от кого (не)показанный explain и что эта субд может выполнять с запросом.
----- PostgreSQL DBA
LIME
Отправлено: 19 Февраля, 2020 - 17:13:15
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Мелкий ну в принципе я подразумевал то же самое, но с учетом благоприобретенных экстрасенсорных способностей) (Добавление)
Мелкий пишет:
Если это на уровне погрешности измерения - то уменьшать не имеет смысла.
LIME пишет:
ошибка замеров наверняка
Lolya
Отправлено: 19 Февраля, 2020 - 21:32:41
Гость
Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018
Помог: 2 раз(а)
LIME пишет:
Lolya это секунды? микросекунды? или сутки?
это в секундах время запроса.
запрос 49 сделан за 0.0070509910583496 секунды времени сервера. И он у меня показывается как "НЕ оптимизированный, требуется оптимизация, ибо слишком большое время исполнения запроса".
LIME
Отправлено: 20 Февраля, 2020 - 11:52:01
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Lolya да забей ты на секунды. С ними все нормально дядя Мелкий шутит.
Не знаю кто там тебе говорит "НЕ оптимизированный, требуется оптимизация, ибо слишком большое время исполнения запроса", но видимо он знает что говорит. А вот EXPLAIN действительно бы не помешал. Что там с индексами?
Lolya
Отправлено: 21 Февраля, 2020 - 08:50:51
Гость
Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018
Помог: 2 раз(а)
Цитата:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE s ref snatch,downloaded,finished,mulct finished 1 const 187 Using index condition; Using where
1 SIMPLE u eq_ref PRIMARY,user PRIMARY 4 amegahd.s.userid 1 Using index condition
1 SIMPLE t eq_ref PRIMARY,id PRIMARY 4 amegahd.s.torrent 1
Если конечно это то, что я поняла.
вот скриншот из пых-админа, там запрос ввела:
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Замечательно ускорилось, так и оставьте. Что тут ещё сказать. (до редактирования было приведено время выполнения explain) (Добавление)
Аллилуйя, explain. И даже понятно какой субд, хоть это так и назвали.
Покажите индексы. Впрочем план адекватный, на порядок производительность уже не улучшить будет.
----- PostgreSQL DBA
Lolya
Отправлено: 21 Февраля, 2020 - 10:11:12
Гость
Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018
Помог: 2 раз(а)
Мелкий пишет:
Замечательно ускорилось, так и оставьте. Что тут ещё сказать. (до редактирования было приведено время выполнения explain)
(Добавление)
Аллилуйя, explain. И даже понятно какой субд, хоть это так и назвали.
Покажите индексы. Впрочем план адекватный, на порядок производительность уже не улучшить будет.
Я ничего не делала, только запрос ввела в пых-админ с добавлением эксплан вначале и всё.
А как индексы увидеть именно для этой связки?
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Lolya это кошмар
Дядя Мелкий пошутил насчет скорости експлэйн))
Индексы у тебя один ужаснее другого
Тут надо тебе понимать что так просто в один день одним советом не получится стать профи.
На вопрос нельзя ответить в формате форума.
Могу только посоветовать узнать про индексы
Узнай что такое Btree.
Составной индекс.
Покрывающий индекс.
В таком порядке
Почитай потом приходи.
Или так и будем смеяться на тобой бедняжкой (Добавление) Мелкий терпение только терпение))
Мелкий пишет:
Замечательно ускорилось, так и оставьте.
фу таким быть)
ну ясно же что не поймет
LIME
Отправлено: 22 Февраля, 2020 - 08:03:47
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Мелкий пишет:
И даже понятно какой субд
а были сомнения? сдает рефлекс экстрасенса?))
ну ясно же...чего умничать
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.