当在正常 table 和来自索引 table 的 select 之间执行内部联接时,索引是否有用
Will indexing be useful when Inner join is performed between normal table and a select from indexed table
假设我有小 table(t1) 和大 table(t2)。我已经索引了 t2 的 column1 和 column2。如果我想 INNER JOIN t1 and (select * from t2 where column1=x) 那么即使在 (select *从 t2 where column1=x) during inner join with t1?
如果我的查询是 (select * from t2 where column1=x) 那么显然索引是有帮助的。当我的完整查询是 运行 时会发生什么?它会先 运行 (select * from t2 where column1=x)(此处将使用索引)然后在不使用索引的情况下与 t1 进行 INNER JOIN 吗?
几乎总是 JOIN
两个 table 比 JOINing
更好 "derived" table.
可能效率低:
FROM t1
JOIN ( SELECT ... FROM t2 ... ) AS t3 ON ...
可能更好:
FROM t1
JOIN t2 ON ...
一个可能的例外是派生的 table (t3
) 比它来自的 table (t2
) 小得多。当 GROUP BY
、DISTINCT
、and/or LIMIT
里面有 t3
.
时,可能会发生这种情况
如果您想进一步讨论,请提供两个 table 的 SELECT
和 SHOW CREATE TABLE
的完整拼写。一个重要的讨论点是存在(或缺失)哪些索引。
假设我有小 table(t1) 和大 table(t2)。我已经索引了 t2 的 column1 和 column2。如果我想 INNER JOIN t1 and (select * from t2 where column1=x) 那么即使在 (select *从 t2 where column1=x) during inner join with t1?
如果我的查询是 (select * from t2 where column1=x) 那么显然索引是有帮助的。当我的完整查询是 运行 时会发生什么?它会先 运行 (select * from t2 where column1=x)(此处将使用索引)然后在不使用索引的情况下与 t1 进行 INNER JOIN 吗?
几乎总是 JOIN
两个 table 比 JOINing
更好 "derived" table.
可能效率低:
FROM t1
JOIN ( SELECT ... FROM t2 ... ) AS t3 ON ...
可能更好:
FROM t1
JOIN t2 ON ...
一个可能的例外是派生的 table (t3
) 比它来自的 table (t2
) 小得多。当 GROUP BY
、DISTINCT
、and/or LIMIT
里面有 t3
.
如果您想进一步讨论,请提供两个 table 的 SELECT
和 SHOW CREATE TABLE
的完整拼写。一个重要的讨论点是存在(或缺失)哪些索引。