【发布时间】:2021-03-23 14:06:51
【问题描述】:
我有 2 个表 TABLE1 和 TABLE2。
- TABLE1 包含 masterId、Id、col1、col2、category 列
- TABLE2 具有列 Id、col1、col2
TABLE2.Id 是主键,TABLE1.Id 是外键。
TABLE1.masterId 是 TABLE1 的主键。
TABLE1 有 1000 万行,ID 为 1 到 1000 万,前 10 行的类别 = 1
TABLE2 只有 10 行,ID 为 1 到 10。
现在我想要 col1 和 col2 值的 category=1(来自 TABLE1 或 TABLE2,因为两个表中的值相同)
以下 2 个查询中哪个查询的输出速度更快?
解决方案1:
SELECT T1.col1, T1.col2
FROM TABLE1 T1
WHERE T1.category = 1
解决方案2:
SELECT T2.col1, T2.col2
FROM TABLE2 T2
INNER JOIN TABLE1 T1 ON T1.Id = T2.Id
WHERE T1.category = 1
解决方案 2 是否可以节省数百万行 TABLE1 的表扫描时间。
限制是: 在我的真实数据库场景中,我可以将 Table1.Id 设为非聚集索引,将 Table1.category 设为非聚集索引。我无法将 Table1.Id 作为聚集索引,因为在实际场景中我的 Table1 中实际上有另一个自动增量列作为主键。因此,请与此限制分享您的想法。
请确认并分享对此的想法。
【问题讨论】:
-
你用的是什么数据库?您标记的
sql-server和plsql相互矛盾 -
对不起,我正在使用 Ms SqlServer 2016
-
让单个查询决定您的架构设计有点不寻常。如果有两个表是有意义的,那么就采用这种设计,而是专注于使用索引之类的东西使第二个查询更快。
-
将相同的数据存储在两个不同的表中(几乎)从来都不是一个好主意。
-
"以下 2 个查询中哪个查询的输出速度更快?"这可以在您的系统上进行测试。如果我们没有数据,谁能知道两者中哪一个更快?
标签: sql sql-server join inner-join