今天看到in语句,发现mysql的in子查询设计的非常糟糕,至于怎么糟糕,先来个实例大家应该就能看出来,
.....
一直以来我们一直认为mysql 是先执行 select id from t where top= 3 (子语句),而in列表查询速度是非常快的;然而通过上图可以看出来,是错误的,mysql 是先对外层表全表扫描压到子查询中,而当外层表数据量少的话,这种设计或许不会引起我们的注意,但是当列如像图上达到上百万的数据量,他的性能不用想就知道是如此的糟糕。
至于怎么优化,可以写关联来重写查询语句
从图上分析就可想而知,这里也就不说了。
或许可以是用函数GROUP_CONCAT()在 in 子语句中构建一个带逗号分割的列表,或许比上面关联的速度更快。
转载请注明:谷谷点程序 » mysql in 子查询优化