2014-10-04 2 views
3

Я хотел бы узнать, может ли этот запрос работать быстрее или как это сделать быстрее, если это возможно.Как ускорить выполнение этого запроса

$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.'&nbsp;&nbsp;'. $total .'</a></li>'; 
} 

echo '<li class="spaceIN"></li><li class="letter">A</li>'; 

Я делаю копию этого скрипта и вставляю его как 100 раз, и это действительно медленная загрузка после этого.

+0

Если отношение 'SELECT' запросов к' INSERT'/'UPDATE' /' DELETE' велико, вы можете сохранить эти счетчики в отдельной таблице и обновить их при обновлении таблицы «videos». –

ответ

4

Как это

select sum(title LIKE '%Cars%') as cars, 
     sum(title LIKE '%Bikes%') as bikes 
from videos 
+0

Спасибо, это намного быстрее. – Tasos

0

Вы можете заменить встроенные запросы в 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 
1

Наряду с предложениями SQL в других ответах - как о чем когда этот запрос запускается каждый раз, когда кто-то посещает эту страницу (при условии, что это происходит) - вместо этого хранят счета в базе данных и имеют задание Cron, запускающее скрипт для регулярного обновления в фоновом режиме. Затем запросите сохраненный счет на этой странице, который, очевидно, будет значительно быстрее

0

Добавить колонку категории, int или перечисление, зависит от того, как часто вы добавляете/меняете категории. Вы можете использовать:

SELECT COUNT(*) as c, category FROM videos GROUP BY category; 

затем. Вааайу лучше иметь определенные категории, чем делать строковые данные по каждому запросу. Кроме того, «%» в начале медленнее, так как он не может использовать индексы.

+0

Благодарим вас за asnwer. Но почему «%» медленно, я должен удалить это? – Tasos

+0

** почему «%» медленно ** хорошо, если вам приходилось читать каждого персонажа в книге, чтобы найти каждое предложение, содержащее «автомобиль», было бы медленнее, чем переходить на индекс, чтобы найти АВТОМОБИЛЬ? –

Смежные вопросы