写分页存储过程,并建立索引。
分页存储过程:如select * from (select Id,name,Row_Number over(order by id)as rownum) t
where t.rownum>=startIndex and t.rownum<=endIndex
当然还有很多细节,一个最重要是建立索引(同意楼上),其他的细节,如:返回指定的列,调整where子句的位置,用where代替having,用exists代替in,用表链接代替exists,避免在索引上使用计算,用union all 代替union等等(参考sql金典一书)。
关于查询性能的优化还有几点(参考sql2008实战)
1.在减少使用列的同时,也可以考虑减少行
2.尽管单个查询去执行负责的操作显得很方便,但是不要低估短小的查询的能力。如果存储过程中有一个执行很长时间的非常大查询,可以试着分解为几个更小的中间结果的查询
3.只在需要的时候使用order by。大结果集的排序会导致额外的开销。如果不是必须的就不用
4.避免在from,where和having子句中隐式转换数据类型。
5.如果唯一行不是必须的,就不需要使用distinct或union(而是使用union all)
6.当在游标与基本集合的方法之间进行选择时,最好选择后者。
.......
希望对你有点帮助
分页最好在server端,也就是database中实现。Sql server 2005/2008, Oracle 用rownumber ,Mysql 用 limit。是否用存储过程决定你的需要。
添加索引,將數據分塊,記錄User常用操作等等
使用存储过程分页,在关键字段建立索引
好的指引 简单叙述了