【问题标题】: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使用它(见下面的帖子)。

标签: mysql inner-join


【解决方案1】:

显而易见的事情是在两个表的rel_idstatus 上创建一个覆盖索引,以满足连接和位置要求。

到目前为止,您尝试过什么?

编辑

你提供了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 上选择索引

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 2013-06-09
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多