【发布时间】:2019-11-13 08:26:49
【问题描述】:
我有两张桌子,即tbl_Small 和tbl_Large。
我存储在 Microsoft Azure 中的表和从 Microsoft SQL Server 查询的表。
--表1:Tbl_Small
CREATE TABLE tbl_Small
(
cola int
);
INSERT INTO tbl_Small VALUES(1234),(123),(34);
--1000 rows
--表2:tbl_Large
CREATE TABLE tbl_Large
(
ID bigint identity(1,1),
cola int,
colb int,
colc varchar(100)
);
INSERT INTO tbl_Large(cola,colb,colc) VALUES(0,140,'A'),(150,200,'C'),(1000,15000,'D');
--30 million rows
我想通过在条件之间加入小表来获取大表的详细信息。
我的尝试:
- 在 tbl_Small(cola) 上创建了
NONCLUSTERED索引。 - 在 tbl_Large(cola) 和 tbl_Large(colb) 上创建了
NONCLUSTERED索引。
查询:
SELECT s.cola as [Input],l.cola,l.colb,l.colc
FROM tbl_Large AS l
INNER JOIN tbl_Small s ON s.cola BETWEEN l.cola and l.colb
注意:以上查询的执行时间超过10分钟。
编辑:在回答中所说的在所有列上添加非聚集索引后,我得到了以下执行计划。
执行时间:5 分钟
DTU 百分比图:
【问题讨论】:
-
执行计划怎么说?
-
@HoneyBadger,在帖子中添加了执行计划。
-
Azure SQL 数据库的层级是什么?能否请您先将小表放在联接而不是大表上?
-
@AlbertoMorillo、
edition = Standard和service_objective = S1,我确实为JOIN交换了表,但没有用。 -
Tier S1 可能不够用。请在运行这些查询时查看 DTU 图,检查门户中的 DTU 图。如果 DTU 图达到 100%,则可能会发生节流
标签: sql sql-server azure azure-sql-database