繁体   English   中英

如何使此查询运行得更快

[英]How to make this query run faster

我想知道这个查询是否可以更快地运行,或者如果可能的话如何使它更快。

$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次,这样做之后加载速度非常慢。

像这样

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

与其他答案中的SQL建议一起 - 如何在每次有人访问该页面时运行该查询(假设发生了什么) - 而是在数据库中存储计数并让Cron作业运行脚本以定期更新它们在后台。 然后查询该页面上存储的计数 - 这显然会快得多

您可以使用布尔表达式中的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

添加类别列,int或enum,取决于添加/更改类别的频率。 你可以使用:

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

然后。 Waaaay最好定义类别而不是每个查询都要做字符串。 开头的'%'也很慢,因为它不能使用索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM