「MySQL」5年经验 Java 程序员面试都用得上的mysql优化手册( 二 )


对于LIKE “%name% , 可以使用全文索引的形式
12. 要慎用in和 not in
例如:select id from t where num in(123) 建议改成 select id from t where num between 1 and 3
对于连续的数值 , 能用 between 就不要用 in 了 。
13. 理解in和exists ,not in和not exists的区别
很多时候用 exists 代替 in 是一个好的选择:如查询语句使用了not in那么内外表都进行全表扫描 , 没用到索引 , 而not exists子查询依然能用到表上索引 , 所以无论哪个表大 , 用not exists都比not in要快 。
select num from a where num in(select num from b) 建议改成: select num from a where exists(select 1 from b where num=a.num)
区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键) , 如果是exists , 那么以外层表为驱动表 , 先被访问 , 如果是IN , 那么先执行子查询 。 所以IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况 。
关于not in和not exists , 推荐使用not exists , 不仅仅是效率问题 , not in可能存在逻辑问题 。
14. 理解select Count (*)和Select Count(1)以及Select Count(column)区别
一般情况下 , Select Count (*)和Select Count(1)两者返回结果是一样的;
假如表没有主键(Primary key) 那么count(1)比count(*)快;
如果有主键的话 , 那主键作为count的条件时候count(主键)最快;
如果你的表只有一个字段的话那count(*)就是最快的;
count(*) 跟 count(1) 的结果一样 , 都包括对NULL的统计 , 而count(column) 是不包括NULL的统计 。
除去这一些优化建议之外 , 当然是有实际操作的演示最有学习效果啊 , 来看我为大家准备的福利吧
MySQL思维导图
MySQL共3.6G视频供你学习
MySQL5.7从入门到精通、深入浅出MySQL和数据库开发优化与管理维护、高性能MySQL技术文档为你解忧
不管是学习视频还是技术文档都是小编精心准备的 , 希望大家能够喜欢 , 如果大家需要的话 , 可以转发关注小编 , 私信小编“资料”来得到获取方式吧~~~