暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
优化关联查询
398
1页
1次
2020-06-23
5墨值下载
在大数据场景下,表与表之间通过一个冗余字段来关联,要比直接使用
JOIN
有更好的性能。
如果确实需要使用关联查询的情况下,需要特别注意的是:
1.
确保
ON
USING
字句中的列上有索引。在创建索引的时候就要考虑到关联的
序。当表
A
和表
B
用列
c
关联的时候,如果优化器关联的顺序
A
B
,那么就不需要在
A
表的对应列上创建索引。没有用到的索引会带来额外的负担,一般来说,除非有其他
由,只需要在关联顺序中的第二张表的相应列上创建索引(具体原因下文分析)。
2.
GROUP BY
ORDER BY
MySQL
才有可能使用索引来优化。
MySQL
MySQL
联执行的略非简单它对何的关联执行嵌套环关操作,即在一
个表中循环取出单条数据,然后在嵌套循环到下一个表中寻找匹配的行,依次下去,直到
找到所有表中匹配的行为为止。然后根据各个表匹配的行,返回查询中需要的各个列。
太抽象了?以上面的示例来说明,比如有这样的一个查询:
SELECT A.xx,B.yy
FROM A INNER JOIN B USING(c)
WHERE A.xx IN (5,6)
MySQL
按照询中关联顺序
A
B
来进关联作,那么用下面的代码
MySQL
如何完成这个查询:
outer_iterator = SELECT A.xx,A.c FROM A WHERE A.xx IN (5,6);
outer_row = outer_iterator.next;
while(outer_row) {
inner_iterator = SELECT B.yy FROM B WHERE B.c = outer_row.c;
inner_row = inner_iterator.next;
while(inner_row) {
output[inner_row.yy,outer_row.xx];
inner_row = inner_iterator.next;
}
outer_row = outer_iterator.next;
}
可以看到,最外层的查询是根
A.xx
列来查询的,
A.c
上如果有索引的话,整个关联查询
也不会使用。再看内层的查询,很明显
B.c
上如果有索引的话,能够加速查询,因此只需
要在关联顺序中的第二张表的相应列上创建索引即可。
of 1
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜