我需要一些帮助来尝试提高脚本的速度。这是两个问题..
$sql = "SELECT PadID FROM keywords WHERE Word = '$search'";
$sql = "SELECT Category, LongCategory, PageBase, PageName, ProgramName,
ProgramVersion, English250, ReleaseDate, License
FROM pads
LEFT JOIN categories ON pads.CatID = categories.CatID
WHERE PadID IN ($pads)
ORDER BY VersionAddDate DESC
LIMIT $variable,20";
第一个查询产生了一个PadId列表,我在第二个查询中使用了一个参数。
这种方法在大多数情况下都可以找到,但是,如果我接到一个非常受欢迎的关键字,那么脚本可能需要几秒钟才能运行。今天早上我有一个9600条记录的关键字。
我该怎么做才能解决它。
编辑:问题是我的网站今天早上被刮了,在20分钟内有几千个电话。但是,无论如何,第二个查询需要几秒钟才能完成,所以我需要改进它。答案 0 :(得分:1)
你可以在一个查询中完成所有这些,但我怀疑这会大大提高性能:
SELECT Category, LongCategory, PageBase, PageName, ProgramName, ProgramVersion, English250, ReleaseDate, License
FROM pads
INNER JOIN keywords ON pads.PadID = keywords.PadID
LEFT JOIN categories ON pads.CatID = categories.CatID
WHERE Word = '$search'
ORDER BY VersionAddDate DESC
LIMIT $variable,20
否则,您是否在表上设置了索引,主键和外键?
返回数千个结果的查询比返回10个结果的查询要慢得多是完全正常的。你无能为力。您的查询已经很简单了。我唯一能想到的就是糟糕的指数。
答案 1 :(得分:0)
您是否对所涉及的表有任何索引,例如VersionAddDate
?
你知道子查询吗?
答案 2 :(得分:0)
今天早上我有一个9600条记录的关键字。
9600返回的记录很难加载,也没有一个有用的搜索结果。 (谁浏览了超过五个谷歌搜索页面?)
将RS缩小到1%会更有意义,考虑根据受欢迎程度,日期等添加“重量”。
为获得最佳性能,请使用复合索引(最高唯一性)。
答案 3 :(得分:0)
您是否确定它实际上是sql查询很慢而不是(php)脚本执行和/或浏览器中的呈现?