SQL 语句调优 where 条件 数据类型 临时表 索引
2016-11-09 16:21
267 查看
基本原则
避免全表扫描建立索引
尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理
尽量避免大事务操作,提高系统并发能力
使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。尽量避免使用游标,因为游标的效率较差。
where 后的条件
应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。
应尽量避免在 where 子句中使用 or 来连接条件,可以考虑使用union 代替
in 和 not in 也要慎用,对于连续的数值,能用 between 就不要用 in,exists 代替 in
尽量避免在 where 子句中对字段进行表达式操作和函数操作
数据类型
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为变长字段存储空间小,对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。
任何地方都不要使用
select * from t,用具体的字段列表代替“*”,不要返回用不到的任何字段。
临时表
避免频繁创建和删除临时表,以减少系统表资源的消耗。对于一次性事件, 最好使用导出表。
在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
如果使用到了临时表,在最后将所有的临时表显式删除时,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
索引
先应考虑在 where 及 order by 涉及的列上建立索引。
在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件 时才能保证系统使用该索引, 否则该索引将不会 被使用, 并且应尽可能的让字段顺序与索引顺序相一致。
索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert和update 的效率,因为 insert 或 update 时有可能会重建索引,所以视具体情况而定。一个表的索引数最好不要超过7个,若太多则应考虑一些不常使用到的列上建的索引是否有必要.
相关文章推荐
- SQL 语句调优 where 条件 数据类型 临时表 索引
- 关于sql条件语句where id in (@参数)执行报错问题(转换成数据类型 int 时失败)(
- sql查询调优之where条件排序字段以及limit使用索引的奥秘
- yii框架中findall方法取数据使用总结,包括select各种条件,where条件,order by条件,limit限制以及使用单纯sql语句query时占位符的使用等
- SQL语句调优 - 索引上的数据检索方法
- sql查询调优之where条件排序字段以及limit使用索引的奥秘
- sql语句的where条件顺序和索引的顺序
- asp.net sql语句中where条件存在中文在程序中取不出数据,在数据库中可以正常取值,数据库为oracle
- SQL语句调优 - 索引上的数据检索方法
- Sql 查询语句中 Where条件语句中 元操作符的运算优先顺序
- sqlser 查询语句有效利用索引的条件
- SQL--表达式,条件语句,运算和WHERE子句 (2)
- 用SQL语句将一字段的ntext数据类型,转换成Nvarchar数据类型,其他类型的方法类似
- 数据表中有字段time(类型为varchar),如何通过sql语句找出这个字段里力离当前最近的一个日期
- SQL语句数据类型转换,int——string
- 要提高SQL查询效率where语句条件的先后次序应如何写
- sql语句更新时没加条件语句,导致表中数据全部更新的应对办法
- 【转】ACCESS中如何在SQL语句的WHERE条件中加日期条件
- 替代SQL语句WHERE条件中OR关键词
- 在同一个sql语句中写不同条件的count数量,和查询半年的数据