gpt4 book ai didi

sql - ON 子句中的列是否需要索引?

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

我必须在连接中引用的列上创建索引吗?例如

SELECT
*
FROM
left_table
INNER JOIN
right_table
ON
left_table.foo = right_table.bar
WHERE
...

我应该在 left_table(foo)、right_table(bar) 或两者上创建索引吗?

当我使用带索引和不带索引的 EXPLAIN (Postgresql) 并切换比较顺序时,我注意到不同的结果

(right_table.bar = left_table.foo)

我确定索引用于 WHERE 子句的左侧,但我想知道我是否需要为 ON 子句中列出的列创建索引。

最佳答案

这取决于您的where条件,但简短的回答是yes

通常左表会将此列作为主键,默认为索引。第二列将是一个外键,您的查询很可能会受益于为该列添加的索引。您需要分析查询以确定是否需要索引。

假设查询是这样的:

SELECT  *
FROM left_table
INNER JOIN right_table ON
left_table.foo = right_table.bar
WHERE left_table.SomeField = 1

right_table.bar 上的索引肯定会用到。

另一边:

SELECT  *
FROM left_table
INNER JOIN right_table ON
left_table.foo = right_table.bar
WHERE right_table.SomeField = 1

在这种情况下,根本不会使用 right_table.bar 上的索引,但会使用 left_table.foo 上的索引。

关于sql - ON 子句中的列是否需要索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481542/

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