2014-10-04 81 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'表时更新它们。 – 2014-10-04 17:41:32

回答

4

喜欢这个

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

谢谢你,这是更快。 – Tasos 2014-10-04 21:04:04

0

您可以用sum功能在布尔表达式替换您的嵌入式查询在select列表:

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或enum取决于您添加/更改类别的频率。您可以使用:

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

然后。 Waaaay更好地定义了类别,而不是在每个查询上都执行字符串填充。另外'%'在开始的时候很慢,因为它不能使用索引。

+0

谢谢你的光临。但为什么'%'慢,我应该删除它? – Tasos 2014-10-04 21:06:39

+0

**为什么'%'缓慢**好,如果你必须读一本书中的每个字符来定位每个包含'汽车'的句子,那么会慢一点,然后翻转到索引找到CAR? – 2014-10-06 03:31:51