【问题标题】:Will indexing be useful when Inner join is performed between normal table and a select from indexed table当在普通表和从索引表中选择时执行内连接时,索引是否有用
【发布时间】:2017-09-14 18:47:15
【问题描述】:

假设我有小表(t1)和大表(t2)。我已经索引了 t2 的 column1 和 column2。如果我想 INNER JOIN t1 and (select * from t2 where column1=x) 那么即使在内部连接期间 (select * from t2 where column1=x) 之后,t2 上的索引也会有帮助与 t1?

如果我的查询是 (select * from t2 where column1=x) 那么显然索引是有帮助的。当我的完整查询运行时会发生什么?它会先运行(select * from t2 where column1=x)(这里将使用索引)然后在不使用索引的情况下与 t1 进行 INNER JOIN?

【问题讨论】:

  • 你有没有用EXPLAIN SELECT ...查看索引是否被使用?但是,理论上,是的,如果索引位于您用作过滤器的列上,则应该使用它。
  • 索引通常很有帮助。这就是为什么 MySQL 团队花费了数千年的开发时间使其运行良好的原因。请阅读这个。 meta.stackoverflow.com/a/271056 请密切关注查询性能部分。请edit您的问题提供更多详细信息。请及时这样做,以免您的问题“不清楚”。谢谢。

标签: mysql indexing inner-join query-performance


【解决方案1】:

几乎总是JOIN 两个表而不是JOINing 到一个“派生”表。

可能效率低下:

 FROM t1
 JOIN ( SELECT ... FROM t2 ... ) AS t3 ON ...

可能更好:

 FROM t1
 JOIN t2 ON ...

一个可能的例外是派生表 (t3) 比它所来自的表 (t2) 小得多。当t3 中存在GROUP BYDISTINCT 和/或LIMIT 时,可能会发生这种情况。

如果您想进一步讨论,请提供两个表格的完整拼写 SELECTSHOW CREATE TABLE。一个重要的讨论点是存在(或缺失)哪些索引。

【讨论】:

  • 谢谢。这就是我需要的。
猜你喜欢
  • 2017-10-04
  • 2023-03-09
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 2013-08-07
  • 1970-01-01
相关资源
最近更新 更多