A 表 join B 表 ,用B表字段排序,如何命中索引,优化效率

在设计表的时候,经常会使用join 做关联
现在出现这样情况:
A 表 join B 表 ,要用 B表 字段做排序,
那么如何命中索引,提高sql 效率

阅读 3k
1 个回答

一般来说,mysql的两个表的连接是先找出A表的一条记录,然后根据连接条件找出B表中的所有记录,然后再回到A表找到下一条记录....
但是你的情况是根据B的某个字段排序,如果按照我上面说的即使在B的排序字段上加了索引那么也不会用到的。Mysql自身有查询优化器的,如果单纯的是你说的业务逻辑,有可能查询优化器会改变你的连接顺序(变成B连接A),这样就变成在B中找到一条记录,然后再去A表找记录。如果这个时候再在B表上建索引就会用到。
具体的情况你要用explain看一下mysql的查询计划才好做优化。
在这里再啰嗦一句,你也可以在你的连接字段和排序字段上建立一个“联合索引”。这样相对分开建索引效率会高一些。但是要遵循向左原则

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题