Я хотел бы знать, может ли этот запрос выполняться быстрее или как сделать его быстрее, если это возможно.
$result = mysql_query("select
(select count(1) FROM videos WHERE title LIKE '%Cars%')as Cars,
(select count(1) FROM videos WHERE title LIKE '%Bikes%') as 'Bikes',
(select count(1) FROM videos WHERE title LIKE '%Airplanes%') as 'Airplanes',
(select count(1) FROM videos WHERE title LIKE '%Trucks%') as 'Trucks',
(select count(1) FROM videos WHERE title LIKE '%Games%') as 'Games'");
$row = mysql_fetch_assoc($result);
foreach($row as $title => $total)
{
echo '<li>
<a href="search.php?search='. $title . '&submit= ">'. $title.' '. $total .'</a></li>';
}
echo '<li class="spaceIN"></li><li class="letter">A</li>';
Я делаю копию этого скрипта и вставляю его 100 раз, и после этого загрузка происходит очень медленно.
Как это
select sum(title LIKE '%Cars%') as cars,
sum(title LIKE '%Bikes%') as bikes
from videos
Наряду с предложениями SQL в других ответах — как насчет того, чтобы вместо того, чтобы запускать этот запрос каждый раз, когда кто-то посещает эту страницу (при условии, что так и происходит), — вместо этого храните счетчики в базе данных и выполняйте задание Cron, чтобы запускать скрипт для их регулярного обновления на заднем фоне. Затем запросите сохраненный счетчик на этой странице — что, очевидно, будет значительно быстрее
Вы можете заменить ваши встроенные запросы в select
список с sum
функции над логическими выражениями:
SELECT SUM (title LIKE '%Cars%') as Cars,
SUM (title LIKE '%Bikes%') as 'Bikes',
SUM (title LIKE '%Airplanes%') as 'Airplanes',
SUM (title LIKE '%Trucks%') as 'Trucks',
SUM (title LIKE '%Games%') as 'Games'
FROM videos
Добавление столбца категории, int или enum, зависит от того, как часто вы добавляете / меняете категории. Вы можете использовать:
SELECT COUNT(*) as c, category FROM videos GROUP BY category;
затем. Вааааа, лучше иметь определенные категории, чем делать строковые вещи в каждом запросе. Кроме того, «%» в начале очень медленный, поскольку не может использовать индексы.