gpt4 book ai didi

mysql - 使用相关子查询比连接更好吗? (索引视角)

转载 作者:行者123 更新时间:2023-11-29 05:09:22 25 4
gpt4 key购买 nike

我在某处读到这样的内容:

Indexes will be used per queries.

如您所知,这是两个查询:

SELECT m1.*, (SELECT 1 FROM mytable2 m2 WHERE col2 = ?) AS sth
FROM mytable1 m1 WHERE col1 = ?

上面的查询可以使用两个索引:mytable1(col1), mytable2(col2)。因为是两个独立的查询。

现在看看这个:(和前面的查询一样,只是使用join而不是子查询)

SELECT m1.*, m2.1 AS sth
FROM mytable1 m1
JOIN mytable2 m2 ON m2.col2 = ?
WHERE m1.col1 = ?

但是这个 ^ 查询只是一个查询。所以它可以只使用一个索引。我的理解对吗?所以使用子查询更适合索引,对吧?

最佳答案

But this ^ query, is just one query. So it can use just one index. Is my understanding right? So using subquery is better for indexing, right?

你误会了。 MySQL 可以使用一个索引每个表引用

所以在这种情况下,它可以使用两个索引:mytable1(col1)、mytable2(col2)。

如果您执行自连接、UNION 或子查询,您甚至可以使用相同 表中的两个不同索引。每次引用该表都算作一个单独的表引用。

SELECT m1.*, m2.1 AS sth
FROM mytable1 m1
JOIN mytable2 m2 ON m2.col2 = ?
WHERE m1.col1 = ?

不考虑索引,这是一个奇怪的查询。您没有将 mytable1 与 mytable2 相关联的条件。所以你在两个表之间做笛卡尔积。一个或两个表可能选择单行,具体取决于您对 col1 和 col2 的条件。但它仍然是笛卡尔积,因此如果两个表的条​​件都返回多行,您将得到具有大量重复的结果集。

关于mysql - 使用相关子查询比连接更好吗? (索引视角),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42167105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com