【发布时间】:2019-06-18 14:38:20
【问题描述】:
我有一个如下所示的 SQL 查询:
SELECT *
FROM tableB ta
INNER JOIN tableB tb ON tb.someColumn = ta.someOtherColumn
someColumn 和 someOtherColumn 都不是它们表的主键。两者都是数据类型int。
TableA 有大约 500.000 条记录,tableB 有大约 250.000 条记录。查询大约需要 2 分钟才能完成,我认为这太长了。
查询执行计划如下:
我已经尝试 (a) 使用 OPTION (RECOMPILE) 和 (b) 在相应的表上创建 INDEX。无济于事。
我的问题是:如何提高这个查询的性能?
【问题讨论】:
-
正在生产多少行?您创建了哪些索引?
-
您要返回多少列?如果您尝试返回太多列,则 SELECT * 会很慢
-
" (b) 在各个表上创建一个索引。"您创建了哪些索引?
-
将其转储到临时表需要多长时间?在管理工作室中选择所有这些行可能会出现问题。
-
发布您的表的 DDL 和所述表的相应索引。该查询计划显示两个表都是通过扫描读取的,因此您拥有的任何索引都不会用于查找;因此这是缓慢的一个原因。
标签: sql sql-server inner-join query-performance