推荐Sql server一些常见性能问题的解决方法_数据库

2019-11-26 17:55栏目:网络数据
TAG:

1.对查询进行优化,应尽量制止全表扫描,首先应构思在 where 及 order by 涉及的列上创设目录。 2.应尽量制止在 where 子句中对字段实行 null 值决断,不然将促成外燃机放任行使索引而张开全表扫描,如: select id from t where num is null 可以在num上设置暗中认可值0,确定保障表中num列没有null值,然后那样查询: select id from t where num=0 3.应尽量防止在 where 子句中应用!=或<>操作符,不然将引擎废弃接纳索引而举办全表扫描。 4.应尽量制止在 where 子句中央银行使 or 来连接条件,不然将形成内燃机放任使用索引而进展全表扫描,如: select id from t where num=10 or num=20 能够那样查询: select id from t where num=10 union all select id from t where num=20 5.in 和 not in 也要慎用,不然会促成全表扫描,如: select id from t where num in 对于接连几日来的数值,能用 between 就不用用 in 了: select id from t where num between 1 and 3 6.上边包车型大巴查询也将形成全表扫描: select id from t where name like '%abc%' 若要提升功用,能够思虑全文检索。 7.倘使在 where 子句中动用参数,也会造成全表扫描。因为SQL唯有在运营时才会剖析局地变量,但优化程序无法将做客布置的选拔推迟到运营时;它必得在编写翻译时开展抉择。可是,假使在编写翻译时确立访谈安插,变量的值照旧不知所以的,因此无法作为目录选择的输入项。如下边语句将进行全表扫描: select id from t where num=@num 能够改为强制查询利用索引: select id from t with where num=@num 8.应尽量避免在 where 子句中对字段实行表明式操作,那将导致发动机放弃采取索引而展开全表扫描。如: select id from t where num/2=100 应改为: select id from t where num=100*2 9.应尽量防止在where子句中对字段进行函数操作,那将招致斯特林发动机扬弃接受索引而张开全表扫描。如: select id from t where substring='abc'--name以abc初阶的id select id from t where datediff(day,createdate,'二〇〇六-11-30')=0--‘二零零五-11-30'生成的id 应改为: select id from t where name like 'abc%' select id from t where createdate>='二零零五-11-30' and createdate

版权声明:本文由大奖888-www.88pt88.com-大奖888官网登录发布于网络数据,转载请注明出处:推荐Sql server一些常见性能问题的解决方法_数据库