ITPub博客

首页 > 大数据 > 数据挖掘 > 好程序员大数据解析 SQL优化方案精解十则

好程序员大数据解析 SQL优化方案精解十则

原创 数据挖掘 作者:好程序员IT 时间:2019-06-10 15:31:31 0 删除 编辑

  好程序员大数据解析   SQL优化方案精解十则 SQL优化是对数据库操作效率提高的重要课题,因此先 直入正题, 与大家分享几个常用的,但容易忽视的几个 SQL优化方案如下:
一、避免进行 null判断
     应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, 这里 最好不要给数据库留 NULL,尽可能的使用 NOT NULL填充数据库。
备注、描述、评论之类的可以设置为 NULL,最好不要使用NULL。不要错误 的认 NULL 不需要空间,如char(100) 型,在字段建立时,空间就固定了。不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。可以在num上设置默认值0,确保表中num列没有null值。
二、不要使用 select *
     使用 select *的话会增加解析的时间,另外也会把不需要的数据同时查询出来,从而延长数据传输时间, 耗费精力。 text类型的字段,通常用来保存一些内容比较繁杂的东西,如果使用select * 则会把该字段也查询出来。
三、谨慎使用模糊查询
     当模糊匹配以 %开头时,该列索引将失效。若不以%开头,该列索引有效。
四、不要使用列号
     使用列号的话,将会增加不必要的解析时间。
五、优先使用 UNION ALL,避免使用UNION
     因为 UNION 会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION   ALL。还有一种情况,如果业务上能够确保不会出现重复记录。
六、在 where语句或者order by语句中避免对索引字段进行计算操作
     当在索引列上进行操作之后,索引将会失效。正确做法应该是将值计算好再传入进来。
七、使用 not exist代替not in
     如果查询语句使用了 not in 那么内外表都进行全表扫描,没有用到索引;而not   extsts 的子查询依然能用到表上的索引。
八、 exist和in的区别
     in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环
再对内表进行查询。因此, in用到的是外表的索引, exists用到的是内表的索引。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。
九、避免在索引列上做如下操作
     1.避免在索引列上使用IS NULL和IS NOT NULL。
     2.避免在索引列上出现数据类型转换。(比如某字段是String类型,参数传入时是int类型)当在索引列上使用如上操作时,索引将会失效,造成全表扫描。
十、复杂操作可以考虑适当拆成几步
     有时候会有通过一个 SQL语句来实现复杂业务的例子出现,为了实现复杂的业务,嵌套多级子查询。造成SQL性能问题。对于这种情况可以考虑拆分SQL,通过多个SQL语句实现,或者把部分程序能完成的工作交给程序完成。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913892/viewspace-2647184/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
欢迎关注公众号:好程序员特训营 web前端教程分享 723729549 大数据教程分享 703503210

注册时间:2019-03-20

  • 博文量
    241
  • 访问量
    185378