MySQL 优化五(关联查询子查询以及 in 的效率问题)(高级篇)

现在我们来谈谈关联查询和子查询的效率问题?(还得要配合具体场景具体分析 实在不行写出两种方案看哪种执行时间更短就用哪种)

1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。

2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。

3.如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。

sql优化到此结束!

现在我们来谈谈关联查询和in()的效率问题?(还得要配合具体场景具体分析 实在不行写出两种方案看哪种执行时间更短就用哪种)

in适合小数据量,连接查询大数据量更优,当然多表连接查询还是能不用就不用的,大数据量时不建议使用多表连接查询,应用时更因该相对于当下场景来选择

.in 和 not in 也要慎用,否则会导致全表扫描,

如:

select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!