SQL性能优化的几个思路

  其实SQL性能优化的本质就是减少运算次数、减少内存消耗、涉及尽量少的数据,建立索引、优化表格结构等手法均为此目的。


  1、建立索引,目的是避免全表扫描。索引一般建立在WHERE、GROUP、JOIN经常使用的字段上,字段需要拥有这样的特点:数据行比较多,至少要过10万;字段的值项较多,至少要超过10个,比如某个字段的值只可能是1或0,建立索引就是浪费。另外索引的建立应秉持最少原则,一张数据表上能不建索引就不建,因为建多了对内存的消耗很厉害,一般情况下索引的数量为字段数量/10上下即可


  2、字段冗余,目的是减少表格关联。很多表格中存有其他表格的主键,用于作表格关联,事实上如果只需要用到其他表格的一两个字段,完全可以把这两个字段都加到表格中作冗余数据。比如常见的数据操作人,仅在数据表中加入操作人ID,取数据的时候往往要关联用户表,如果加入操作人姓名就无需关联。还有很多字典数据,把ID和内容都加进去就不需要关联字典表,减少性能消耗。


  3、统一数据类型,目的是减少数据转换量。在两张表格中,存在一个含义完全一致的字段,但是它们的数据类型不一样,那么在使用它们进行表格关联时,系统就会自动进行数据转换,无形中增加运算量。比如都有退款单ID这个字段,一张表中设计为int,另一张表中设计为varchar,那么查询时系统就会自动把int转为varchar,数据运算量大增。在where子句中也是如此,如“column1=1”,如果column1是数字型,后面的1就不用加单引号,否则就一定要加上,避免数据转换


  4、不对字段进行运算。column1=2-1比column1+1=2好,column1>='2019-01-01' and column1<'2019-01-02'比Convert(varchar(10),column1,120)='2019-01-01'好,因为前一种写法都是对字段上的所有数据进行运算,后一种写法只对过滤的值进行运算,后面的运算量明显要高出前面很多倍


  5、尽量少查数据。比如判断是否存在指定数据时,用count(1)涉及的数据可能有很多,但用top 1就最多一条,谁优谁劣一目了然。


  6、尽量不在索引列上使用not、<>、!=、IS NULL、IS NOT NULL,因为这些关键字都会造成全表扫描,索引建了也没用。

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬瓜就是我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值