标题写的有些大了……
我做的一个PHP玩具用的是Sqlite数据库,昨天某网站采集了4039篇文章,发现页面打开速度慢的要死,看了一下耗时,发现sqlite在数据量比较大(4000算大?……我觉得挺大的了)的时候执行order by xxx desc会变得很慢……
1、select * from blog_cms where status=1 limit 0,10
耗时15ms
2、select * from blog_cms where status=1 ORDER BY id DESC limit 0,10
耗时1187ms
如果Sqlite查询只是搜索出id会快些↓
3、select id from blog_cms where status=1 ORDER BY id DESC limit 0,10
耗时650ms
那么就这样来,Sqlite查询直接搜索id,然后再通过id查询详细信息↓
4、select * from blog_cms where id in(select id from blog_cms where status=1 ORDER BY id DESC limit 0,10) order by id desc
耗时656ms
这样基本上是满足条件的Sqlite查询速度最快的方法了,我们再来看看Sqlite查询时去掉status=1的条件时的查询速度
5、select * from blog_cms where id in(select id from blog_cms ORDER BY id DESC limit 0,10) order by id desc
耗时75ms
第一个查询真快,咱们再看看这样一个Sqlite查询语句
6、select * from blog_cms where status=1 limit 4000,10
耗时593ms
简单的逆序查询用第四个方法是最快的。
诸如其他的Sqlite查询语句的优化,请谷鸽之