如何在内部连接表上强制索引?
Posted
技术标签:
【中文标题】如何在内部连接表上强制索引?【英文标题】:How to force an index on inner joined tables? 【发布时间】:2011-01-19 14:02:04 【问题描述】:如何在与此类似的查询上强制索引。我需要分别在 foo 和 bar 上强制建立索引。
SELECT foo.*, bar.*
FROM foo
INNER JOIN bar ON foo.rel_id = bar.rel_id
WHERE foo.status = 1
AND bar.status = 1
【问题讨论】:
您能否解释一下“强制”索引是什么意思。你的意思是自动创建它(不起作用)还是强制mysql使用它(见下面的帖子)。 【参考方案1】:显而易见的事情是在两个表的rel_id
和status
上创建一个覆盖索引,以满足连接和位置要求。
到目前为止,您尝试过什么?
编辑
你提供了index hints,但每个人都回答的关键似乎是你不应该这样做。
从 MySQL 4.0.9 开始,你也可以使用 FORCE INDEX,其作用类似于 USE INDEX (index_list) 但添加了 假设表扫描是 非常贵。换句话说,一个 表扫描仅在没有 使用给定索引之一的方法 在表中查找行。
【讨论】:
完全同意,但是我的问题是如何在内部连接上强制索引。【参考方案2】:假设索引 a 存在于 foo 和索引 b 上:
SELECT foo.*, bar.*
FROM foo FORCE INDEX (a)
INNER JOIN bar FORCE INDEX (b) ON foo.rel_id = bar.rel_id
WHERE foo.status = 1
AND bar.status = 1
会强制在 MySql 上选择索引
【讨论】:
以上是关于如何在内部连接表上强制索引?的主要内容,如果未能解决你的问题,请参考以下文章