2008-05-08

浅谈MySql下的查询优化:一个查询优化的简单例子

Posted in PHP at 20:24 Author:仲远

标签:

PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了。不过,虽然使用PHP访问Mysql非常快,以至于在PHP下都不需要像java那样使用连接池,但是,如果使用不当的话,再加上数据库中的数据量达到几十万、上百万时,依然会导致Mysql查询速度低下,页面打开速度缓慢。因此,需要做好对mysql的查询优化。下面通过一个简单的例子,展现不同的SQL语句对于查询速度的影响:

存在这样的一张表test,它有一个自增的id作为主索引。现在要查询id号处于某一个范围内的记录,可以使用如下SQL语句:
SELECT *
FROM `test`
order by id asc
limit 208888,50
这条SQL语句的意思是从id号为208888的记录开始向后取50条记录。在一个30万条记录的数据库中测试,在主索引都已经建立好的情况下,执行这条语句的时间为40~50秒。

那么有没有更快SQL语句来执行呢?显然是有的。看看下面这条SQL语句:
SELECT *
FROM `test`
WHERE id
BETWEEN 208838
AND 208888
这条语句使用了一个条件进行过滤,在实际中测试的执行时间约为0.06秒。

究其原因,是因为虽然id属性上已经有索引了,但是排序仍然是一个非常高代价的操作,要慎用。而第二个语句,就可以让MySql充分利用数据库中已经建立好的B+树索引,所以查找起来速度相当快,是原来的几百倍。

由此可见,网站开发者在使用SQL语句的时候,一定要小心谨慎,因为一个疏忽大意的SQL语句,可能使得你的网站访问速度急剧下降,后台数据库面临巨大压力,并且很快陷入无法打开页面的窘境。

本文可以自由转载,转载时请保留全文并注明出处。作者:仲子
原文链接:http://www.wangzhongyuan.com/archives/363.html 

本文可以自由转载,转载时请保留全文并注明出处:
转载自仲子说 [ http://www.wangzhongyuan.com/ ]
原文链接:

1 Comment »

  1. 张鹏 said,

    2009年July27日 at 0:17

    哇!多谢师兄提醒哪!

Leave a Comment

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word