I have two table's namely tbl_Small
and tbl_Large
.
Both the table's I have stored in Microsoft Azure and querying from Microsoft SQL Server.
--Table 1: Tbl_Small
CREATE TABLE tbl_Small
(
cola int
);
INSERT INTO tbl_Small VALUES(1234),(123),(34);
--1000 rows
--Table 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
I want to get large table details by joining small table with between condition.
My try:
- Created
NONCLUSTERED
index on tbl_Small(cola).
- Created
NONCLUSTERED
index on tbl_Large(cola) and tbl_Large(colb).
Query:
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
Note: The above query's execution time is over 10 minutes.
Edit: After adding nonclustered index on all columns as said in answer, I got the following execution plan.
Time taken for execution: 5 min
DTU Percentage graph:
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…