提高数据库查询速度的几点经验
游标是中的使用select /+using index 索引名+/一定要万分注意,经过索引后的库表已经重新排序,数据的顺序在程序执行过程中确实改变了,是否符合自已的编程需要。
要提高查询的效率,则where中的条件要尽可能的写全。如一条查询语句中用到了两个表,则除了将两个表的关联处理好以外,还要将两个表的关联字段均和变量联系起来。
如:
select * from dec,mst where dec.id = mst.id and dec.id = :ls_id and mst.id = :ls_id;
而不是 select * from dec,mst where dec.id = mst.id and dec.id = :ls_id;
或
select * from dec,mst where dec.id = mst.id and mst.id = :ls_id;
1、 SQL Server缺省情况下建立的索引是非聚簇索引,由于非聚簇索引不重新组织表中的数据,而是对每一行存储索引列值并用一个指针指向数据所在的页面。换句话说非聚簇索引具有在索引结构和数据本身之间的一个额外级。一个表如果没有聚簇索引时,可有250个非聚簇索引。每个非聚簇索引提供访问数据的不同排序顺序。在建立非聚簇索引时,要权衡索引对查询速度的加快与降低修改速度之间的利弊。
2、对更新频繁的表来说,表上的非聚簇索引比聚簇索引和根本没有索引需要更多的额外开销。对移到新页的每一行而言,指向该数据的每个非聚簇索引的页级行也必须更新,有时可能还需要索引页的分理。
缺省情况下,tempdb数据库是放置在master设备上,容量为2M,而临时数据库是活动最为平凡的数据库常常被用来排序、创建临时表、重格式化等操作,所以tempdb的优化应该受到特别的关注:
第一步:调整临时库的位置
1、tempdb数据库缺省放在master设备上,将临时数据库发在分离的设备上是更可取的。
2、打开tempdb数据库,从段上删除master设备 。
第二步:将临时数据库与高速缓冲进行绑定。
由于临时表的创建、使用,临时数据库会频繁地使用数据缓存,所以应为临时数据库创建高速缓存,从而可以使其常驻内存并有助于分散I/O:
1、创建命名高速缓存
sp_cacheconfig “tempdb_cache”,”10m”,”mixed”
2、重新启动server
3、捆绑临时数据库到tempdb_cache高速缓存
sp_bindcache “tempdb_cache”, tempdb
4、若有大的I/O,配置内存池
第三步:优化临时表
大多数临时表的使用是简单的,很少需要优化。但需要对临时表进行复杂的访问则
应通过使用多个过程或批处理来把表的创建和索引分开。以下技术可以改善临时表的优化
1、在临时表上创建索引
2、把对临时表的复杂的使用分散到多个批处理或过程中,以便为优化器提供信息(举例说明,就是有一个操作复杂的存储过程,将这个复杂的存储过程分解成若干个简单的存储过程,然后执行操作。)