- 对查询进行优化,应尽量避免全表扫描,首先应考虑在WHERE及ORDER BY涉及的列上建立索引。
- 应尽量避免在where子句中对字段进行NULL值判断,建表时NULL是默认值,但大多数时应该使用NOT NULL。
- 尽量避免在where子句中使用!=或<>操作符。
- 应尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引进行全表扫描。
- IN和NOT IN也要慎用,否则会导致全表扫描,可以使用between就尽量使用between。
- 在使用like需要注意不要使用 like ‘%abc%’或者like '%abc',可使用like 'abc%'。
- 如果在where子句中使用参数,也会导致全表扫描。
- 很多情况下可以使用EXISTS代替IN是一个好的选择。
- 索引可以提高相应的select的效率,但同时也降低了INSERT及UPDATE的效率,一个表的索引数最好不要超过6个。
- 应尽量可能的避免更新clustered索引数据列,一旦更新数据列,会耗费相当大的资源。
- 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能并会增加存储开销。
- 应尽量使用varchar,nvarchar代替char,nchar。字段长度可变,可以节省存储空间。
- 在语句查询时,不要使用*。
- 尽量不要向客户端返回大数据
- 近可能使用表别名,把别名前缀于每个字段上,可减少解析时间。
- 使用临时表。
- 某些查询SQL中加上nolock,读和写相互阻塞,为了提高并发性能。但是会可能读到未提交的脏数据。使用nolock有3条原则:
- 查询的结果用于“插,删,改”的不能加nolock
- 查询的表属于频繁发生页分裂的,慎用nolock
- 能够用临时表提高性能的,不要用nolock
- 不要使用超过5个以上的表连接,少用子查询,视图嵌套不要过深,一般的视图嵌套不要超过2个
posted @
2021-01-18 11:11
小楼一夜雨
阅读(
47)
评论()
收藏
举报