首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

基于目录的SQL语句优化之一

2012-07-25 
基于索引的SQL语句优化之一避免对列的操作任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函

基于索引的SQL语句优化之一

避免对列的操作

任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。 ??

例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢: ??

? ? ? ?select * from record where ?substrb(CardNo,1,4)='5378'(13秒) ?

? ? ? ?select * from record where ?amount/30< 1000(11秒) ?

? ? ? ?select * from record where ?to_char(ActionTime,'yyyymmdd')='19991201'(10秒) ?

由于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表扫描,因此将SQL重写如下:?

? ? ? ?select * from record where CardNo like ?'5378%'(< 1秒)

? ? ? ?select * from record where amount ?< 1000*30(< 1秒)

? ? ? ?select * from record where ActionTime= to_date ('19991201' ,'yyyymmdd')(< 1秒)

差别是很明显的!

热点排行