【发布时间】:2024-05-21 11:50:02
【问题描述】:
我不擅长 SQL。
我正在寻找一种方法来加快这样的简单连接:
SELECT
E.expressionID,
A.attributeName,
A.attributeValue
FROM
attributes A
JOIN
expressions E
ON
E.attributeId = A.attributeId
我这样做了几十万次,随着桌子变大,它花费的时间越来越多。
我正在考虑索引 - 如果我要加快对单个表的选择,我可能会在表达式表的 expressionID 上放置非聚集索引,在属性表的 (attributeName, attributeValue) 上放置另一个索引 - 但我没有知道这如何适用于联接。
编辑:我已经在表达式表上的 expressionId (PK)、attributeId (PK, FK) 和属性表上的 attributeId (PK) 上拥有一个聚集索引
我已经看到this 的问题,但我要求的是更一般的问题,可能更简单。
任何帮助表示赞赏!
【问题讨论】:
-
这个查询中有 WHERE 子句吗?返回了多少行?
-
no WHERE - 我正在使用它来填充一个临时表,然后根据一组名称-值对使用许多 where 子句进行过滤以获得匹配的 expressionId
-
您应该发布查询的后半部分。我敢打赌,速度变慢是由于将大量记录插入到该临时表中造成的。通过组合它们可能会大大改善它,因此更早使用 WHERE 子句来防止巨大的插入。
-
开始了另一个问题,因为这个问题更通用并且面向简单的连接性能 --> *.com/questions/923136/…
标签: sql-server performance join