MySQL慢优化个人记录

该文章记录个人工作或者学习中经历的MySQL优化,该文章不做定时更新

1.子查询

1.1背景

用mysql保存了一些不太更新的数据,且数据量不大,所以用到了一些join及子查询
但是在开发阶段也发现慢sql,但表数据量不足5k。

in 接子查询是非常容易引发慢sql的,调优也比较难定位,一般这种推荐写成两个sql,将子查询的结果直接放在第二个sql的in里面。

select name
from t
where id in
(
	select t.id
	from a
	where age>10
)

sql的结构跟上类似,外层查询id用了in,子查询出来的数据都是可控的,不超过50条
使用EXPLAIN进行分析
在这里插入图片描述
发现了DEPENDENT SUBQUERY这个关键字,及外层查询id in操作怎么检索了这么多条数据(这是主键)!

1.2原因

http://itindex.net/detail/46772-优化-mysql-dependent
网上一搜DEPENDENT SUBQUERY就很容易找到关于子查询优化的文章,上面一篇挺好的!
原因是你以为sql会先 进行子查询,然后将子查询的接口 in一下就出来。但并不是

文中链接提到的《高性能mysql》的观点,总之用子查询(一般使用子查询外层条件是 in),会造成外层查询的全量检索,导致查询速度变慢。

1.3如何优化

可以使用临时表进行join

select name
from t t1,(
	select t.id
	from a
	where age>10
) t2
where t1.id=t2.id

这样检索的数据量就比较正常了

2.不能命中索引的情况

2.1 in子查询引发外表全量扫表
2.2 索引列字段不一样,例如varchar类型的索引,我们查询时使用的是int类型,也不会命中索引
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值