|
mysql只支持nest loop是官文上说的,我也是昨天才看到。
MySQL resolves all joins using a nested-loop join method.
https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
在oracle环境下,如果有大量的latch竞争,多半是nest loop造成的,
但mysql仅用nest loop却很少碰到CPU飙高的情况。mysql如果连接的表很多,那么嵌套的层次很深的,
有类似下面的效应
int main()
{
int i, j,k;
for ( i = 1; i <= 10; ++i )
{
for ( j = 1; j <= 10; ++j )
{
for (k=1; k <=10; ++k)
{
printf("%d ", i * j * k);
printf("\n");
}
}
}
return 0;
}
这样的sql有的会执行好几秒,但不觉得CPU有多高。这估计是mysql的和oracle的缓存机制造成的
mysql的简单粗暴的query cache基本上是不开的。
我对mysql的了解还不是很深刻,不知道mysql的部署是不是很强调磁盘的速度和IO,比如建议ssd等。
|
|