共计 1312 个字符,预计需要花费 4 分钟才能阅读完成。
本篇内容主要讲解“SQL 十个优化技巧是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“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 语句实现,或者把部分程序能完成的工作交给程序完成。
到此,相信大家对“SQL 十个优化技巧是什么”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!