SQL优化十八条

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

posted @ 2021-01-18 11:11  小楼一夜雨  阅读(47)  评论(0)    收藏  举报