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 :: можно улучшить запрос?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Lolya
Отправлено: 17 Февраля, 2020 - 23:42:45
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




Есть запрос, который сильно много берет по времени - тяжелый. Вроде и правильно прописан, но хотелось бы немного модернизивать. Есть куда его улучшать?
время срабатывания:
[56] => 0.011683940887451

CODE (htmlphp):
скопировать код в буфер обмена
  1. 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
  2. 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 еще больше время показывает.

(Отредактировано автором: 17 Февраля, 2020 - 23:44:11)

 
 Top
biperch
Отправлено: 19 Февраля, 2020 - 11:21:00
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




u.enabled = 'yes' поместить в условие джойна
убрать order by если он не принципиален, он увеличивает время, не знаю как с ним у вас быстрее
А так же индексы по полям которые участвуют в условиях ускорят ваш запрос
 
 Top
LIME
Отправлено: 19 Февраля, 2020 - 13:21:03
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




biperch пишет:
не знаю как с ним у вас быстрее
никак
ошибка замеров наверняка
biperch пишет:
А так же индексы по полям которые участвуют в условиях ускорят ваш запрос
тут один составной индекс по всем полям snatched которые участвуют в условиях
причем первыми пусть идут наиболее селективные и важно учесть ASC/DESC('yes', 'no' так себе значения если это строки), т.е. которых меньше в результате
Lolya пишет:
по таблице юзверов(~1000) и взятых файлов (файлов ~1500)
смех и слезы
тут нечего ускорять

(Отредактировано автором: 19 Февраля, 2020 - 14:09:11)

 
 Top
Lolya
Отправлено: 19 Февраля, 2020 - 13:50:16
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




Убрала
CODE (htmlphp):
скопировать код в буфер обмена
  1. AND u.enabled = 'yes' ORDER BY userid

Вот результат:
CODE (htmlphp):
скопировать код в буфер обмена
  1. [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]
  2.  
  3. [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]


Но хотелось бы, если возможно, на более шустрый вариант перевести.
 
 Top
Мелкий Супермодератор
Отправлено: 19 Февраля, 2020 - 15:29:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




И никто не спросил ни о какой СУБД вообще речь, ни где explain.
Что ж, и в каких именно попугаях измеряется это "много времени", впрочем, тоже.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 19 Февраля, 2020 - 16:00:56
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




давай спросим.
Мелкий какая принципиальная разница в данном случае о какой рсубд речь?
Мелкий не все ли равно чему равен попугай, если задача тс уменьшить их количество несмотря ни на что?
0.007... и 0.001... вот такие цифры при колве записей < 2000 в обеих табличках
давай спросим
Lolya это секунды? микросекунды? или сутки?
 
 Top
Мелкий Супермодератор
Отправлено: 19 Февраля, 2020 - 17:08:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




LIME пишет:
не все ли равно чему равен попугай, если задача тс уменьшить их количество несмотря ни на что?

Если это на уровне погрешности измерения - то уменьшать не имеет смысла.
Как раз исходя из объёма данных я предполагаю что это именно этот случай.

LIME пишет:
какая принципиальная разница в данном случае о какой рсубд речь?

Чтобы понимать от кого (не)показанный explain и что эта субд может выполнять с запросом.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 19 Февраля, 2020 - 17:13:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Мелкий ну в принципе я подразумевал то же самое, но с учетом благоприобретенных экстрасенсорных способностей)
(Добавление)
Мелкий пишет:
Если это на уровне погрешности измерения - то уменьшать не имеет смысла.
LIME пишет:
ошибка замеров наверняка
 
 Top
Lolya
Отправлено: 19 Февраля, 2020 - 21:32:41
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




LIME пишет:
Lolya это секунды? микросекунды? или сутки?

это в секундах время запроса.
запрос 49 сделан за 0.0070509910583496 секунды времени сервера. И он у меня показывается как "НЕ оптимизированный, требуется оптимизация, ибо слишком большое время исполнения запроса". Огорчение
 
 Top
LIME
Отправлено: 20 Февраля, 2020 - 11:52:01
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Lolya да забей ты на секунды. С ними все нормально дядя Мелкий шутит.
Не знаю кто там тебе говорит "НЕ оптимизированный, требуется оптимизация, ибо слишком большое время исполнения запроса", но видимо он знает что говорит. А вот EXPLAIN действительно бы не помешал. Что там с индексами?
 
 Top
Lolya
Отправлено: 21 Февраля, 2020 - 08:50:51
Post Id


Гость


Покинул форум
Сообщений всего: 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


Если конечно это то, что я поняла.
вот скриншот из пых-админа, там запрос ввела:
Спойлер (Отобразить)

(Отредактировано автором: 21 Февраля, 2020 - 09:23:14)

 
 Top
Мелкий Супермодератор
Отправлено: 21 Февраля, 2020 - 09:46:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Замечательно ускорилось, так и оставьте. Что тут ещё сказать. (до редактирования было приведено время выполнения explain)
(Добавление)
Аллилуйя, explain. И даже понятно какой субд, хоть это так и назвали.
Покажите индексы. Впрочем план адекватный, на порядок производительность уже не улучшить будет.


-----
PostgreSQL DBA
 
 Top
Lolya
Отправлено: 21 Февраля, 2020 - 10:11:12
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




Мелкий пишет:
Замечательно ускорилось, так и оставьте. Что тут ещё сказать. (до редактирования было приведено время выполнения explain)
(Добавление)
Аллилуйя, explain. И даже понятно какой субд, хоть это так и назвали.
Покажите индексы. Впрочем план адекватный, на порядок производительность уже не улучшить будет.

Я ничего не делала, только запрос ввела в пых-админ с добавлением эксплан вначале и всё.
А как индексы увидеть именно для этой связки?

delet

(Отредактировано автором: 22 Февраля, 2020 - 19:23:38)

 
 Top
LIME
Отправлено: 21 Февраля, 2020 - 22:38:54
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Lolya это кошмар
Дядя Мелкий пошутил насчет скорости експлэйн))
Индексы у тебя один ужаснее другого
Тут надо тебе понимать что так просто в один день одним советом не получится стать профи.
На вопрос нельзя ответить в формате форума.
Могу только посоветовать узнать про индексы
Узнай что такое Btree.
Составной индекс.
Покрывающий индекс.
В таком порядке
Почитай потом приходи.
Или так и будем смеяться на тобой бедняжкой
(Добавление)
Мелкий терпение только терпение))
Мелкий пишет:
Замечательно ускорилось, так и оставьте.
фу таким быть)
ну ясно же что не поймет
 
 Top
LIME
Отправлено: 22 Февраля, 2020 - 08:03:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Мелкий пишет:
И даже понятно какой субд
а были сомнения? сдает рефлекс экстрасенса?))
ну ясно же...чего умничать
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB