「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技术文档为你解忧
不管是学习视频还是技术文档都是小编精心准备的 , 希望大家能够喜欢 , 如果大家需要的话 , 可以转发关注小编 , 私信小编“资料”来得到获取方式吧~~~
- 开源中国@33 计划使用 OpenJDK 11 作为默认 Java 版本,Fedora
- 『姵来晓晓看娱乐』并存入mysql数据库,超详细,python3快速爬取房源信息
- Java架构师技术栈分享■request body读取流程详解,nginx
- [千锋广州]5个常用的Java微服务开源框架推荐
- 「Java架构学习交流」从基本概念深入到实现,跟面试官侃半小时MySQL事务隔离性
- #Java#Java 图片保存到数据库
- 「Java」Java中的网络编程(一)
- 【美团】我说去美团面试【Java岗】得会这5个知识点,朋友不信,结果挂了...
- Java@Java并发编程之支持并发的list集合你知道吗
- 「Java」你没见过的2020年Java面试题,总共485页,程序员不打无准备之仗