Запрос происходит очень долго php, mysql
при таком коде скрипт очень долго грузится (4,5 секунд)
$findresdecoder = mysqli_query($cfg->get_connection(),"SELECT * FROM `harddecoder` WHERE `vk_id`='".$vkkid."' ORDER BY `id` DESC LIMIT 25");
while($row=mysqli_fetch_array($findresdecoder)){
$hash=$row['hash'];
$findhashdb = mysqli_query($cfg->get_connection(),"SELECT COUNT(*) FROM `harddecoder` WHERE `hash`='".$hash."'");
$findhash=mysqli_fetch_assoc($findhashdb);
}
А именно при строке
$findhashdb = mysqli_query($cfg->get_connection(),"SELECT COUNT(*) FROM `harddecoder` WHERE `hash`='".$hash."'");
внутри while. Есть ли способы этот код оптимизировать, и как?
Ответы (1 шт):
Автор решения: Eugene X
→ Ссылка
- Сделать 1им запросом....
- Расставить индекс на harddecoder.hash
<?php
$in = ["hash1", "hash2", "hash3"];
$join = '("' . join($in, '","') . '")'
$SQL = <<< END_SQL
SELECT COUNT(*)
FROM `harddecoder`
WHERE `hash` IN $join
GROUP BY `hash`
END_SQL;
Добавлено чуток спустя:
Вот полный пример как всё собрать, с помощью 1 запроса на примере TryIt editor https://www.w3schools.com/sql/trysql.asp?filename=trysql_asc
SELECT Country, COUNT(a.Country) as "CountTotal"
FROM
(SELECT c.Country FROM Customers as "c" ORDER BY c.PostalCode DESC LIMIT 25) as "a"
GROUP BY a.Country
ORDER BY CountTotal DESC