MySql,任何人都可以建议如何改进我的查询,我的脚本的速度?

时间:2011-03-07 08:13:04

标签: mysql sql query-optimization

我需要一些帮助来尝试提高脚本的速度。这是两个问题..

$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分钟内有几千个电话。但是,无论如何,第二个查询需要几秒钟才能完成,所以我需要改进它。

4 个答案:

答案 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)脚本执行和/或浏览器中的呈现?