Queries for FORCESEEK Table Hint
1. FORCESCAN with a Join (Influencing Scan vs. Seek for a Table in a Join)
SQL Server Query 1
SELECT
C.CompanyName,
COUNT(O.OrderID) AS NumberOfOrders
FROM Customers AS C WITH (FORCESCAN) -- Force a scan on the Customers table
JOIN Orders AS O ON C.CustomerID = O.CustomerID
WHERE O.EmployeeID = 1 -- Filter for a specific employee
GROUP BY C.CompanyName
ORDER BY NumberOfOrders DESC;
Create SQL query with SqlQueryBuilder 1
var (sql1, parameters1) = new SqlQueryBuilder()
.Select()
.Column("C.CompanyName")
.Column(new COUNT(new Column("O.OrderID")),"NumberOfOrders")
.From("Customers", "C", new List<IHint>() { new FORCESCAN() })
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("Orders", "O")
.On(new Column("C.CustomerID").Equale(new Column("O.CustomerID")))
})
.Where(new Where(new Column("O.EmployeeID").Equale(1)))
.GroupBy(new GroupBy("C.CompanyName"))
.OrderBy(new OrderBy().SetColumnDescending("NumberOfOrders"))
.Build();
Query build by SqlQueryBuilder 1
SELECT C.CompanyName,
COUNT(O.OrderID) AS NumberOfOrders
FROM Customers AS C WITH (FORCESCAN)
INNER JOIN
Orders AS O
ON C.CustomerID = O.CustomerID
WHERE O.EmployeeID = @pMAIN_2507192014395563290
GROUP BY C.CompanyName
ORDER BY NumberOfOrders DESC;
Parameters (If used)
Name |
Value |
@pMAIN_2507192014395563290 |
1 |
Query Results 1:
|
CompanyName |
NumberOfOrders |
1 |
Save-a-lot Markets
|
6
|
2 |
Rattlesnake Canyon Grocery
|
5
|
3 |
Ernst Handel
|
5
|
4 |
Frankenversand
|
5
|
5 |
Berglunds snabbköp
|
4
|
6 |
Königlich Essen
|
4
|
7 |
QUICK-Stop
|
4
|
8 |
Vaffeljernet
|
4
|
9 |
Tortuga Restaurante
|
4
|
10 |
Hanari Carnes
|
3
|
11 |
Around the Horn
|
3
|
12 |
LILA-Supermercado
|
3
|
13 |
Mère Paillarde
|
3
|
14 |
Bon app'
|
3
|
15 |
Bottom-Dollar Markets
|
2
|
16 |
Alfreds Futterkiste
|
2
|
17 |
Drachenblut Delikatessen
|
2
|
18 |
Furia Bacalhau e Frutos do Mar
|
2
|
19 |
LINO-Delicateses
|
2
|
20 |
Eastern Connection
|
2
|
21 |
HILARION-Abastos
|
2
|
22 |
Tradição Hipermercados
|
2
|
23 |
Wolski Zajazd
|
2
|
24 |
Victuailles en stock
|
2
|
25 |
Seven Seas Imports
|
2
|
26 |
Split Rail Beer & Ale
|
2
|
27 |
Magazzini Alimentari Riuniti
|
2
|
28 |
Santé Gourmet
|
2
|
29 |
Reggiani Caseifici
|
2
|
30 |
Ricardo Adocicados
|
2
|
31 |
Richter Supermarkt
|
1
|
32 |
Romero y tomillo
|
1
|
33 |
Rancho grande
|
1
|
34 |
Suprêmes délices
|
1
|
35 |
The Big Cheese
|
1
|
36 |
Wartian Herkku
|
1
|
37 |
Wellington Importadora
|
1
|
38 |
White Clover Markets
|
1
|
39 |
Wilman Kala
|
1
|
40 |
Hungry Coyote Import Store
|
1
|
41 |
Hungry Owl All-Night Grocers
|
1
|
42 |
Island Trading
|
1
|
43 |
La maison d'Asie
|
1
|
44 |
Lazy K Kountry Store
|
1
|
45 |
Let's Stop N Shop
|
1
|
46 |
Lonesome Pine Restaurant
|
1
|
47 |
Old World Delicatessen
|
1
|
48 |
Ottilies Käseladen
|
1
|
49 |
Pericles Comidas clásicas
|
1
|
50 |
Que Delícia
|
1
|
51 |
Galería del gastrónomo
|
1
|
52 |
Godos Cocina Típica
|
1
|
53 |
Gourmet Lanchonetes
|
1
|
54 |
Great Lakes Food Market
|
1
|
55 |
GROSELLA-Restaurante
|
1
|
56 |
Folies gourmandes
|
1
|
57 |
Folk och fä HB
|
1
|
58 |
France restauration
|
1
|
59 |
Franchi S.p.A.
|
1
|
60 |
Du monde entier
|
1
|
61 |
Antonio Moreno Taquería
|
1
|
62 |
B's Beverages
|
1
|
63 |
Chop-suey Chinese
|
1
|
64 |
Comércio Mineiro
|
1
|
65 |
Die Wandernde Kuh
|
1
|
2. FORCESCAN with GROUP BY and Aggregations on a Large Table
SQL Server Query 2
SELECT
OD.ProductID,
SUM(OD.Quantity) AS TotalQuantityOrdered,
AVG(OD.Discount) AS AverageDiscount
FROM [Order Details] AS OD WITH (FORCESCAN) -- Force a scan on the Order Details table
WHERE OD.Quantity > 5
GROUP BY OD.ProductID
ORDER BY TotalQuantityOrdered DESC;
Create SQL query with SqlQueryBuilder 2
var (sql2, parameters2) = new SqlQueryBuilder()
.Select()
.Column("OD.ProductID")
.Column(new SUM(new Column("OD.Quantity")),"TotalQuantityOrdered")
.Column(new AVG(new Column("OD.Discount")),"AverageDiscount")
.From("[Order Details]", "OD", new List<IHint>() { new FORCESCAN() })
.Where(new Where(new Column("OD.Quantity").GreaterThan(5)))
.GroupBy(new GroupBy("OD.ProductID"))
.OrderBy(new OrderBy().SetColumnDescending("TotalQuantityOrdered"))
.Build();
Query build by SqlQueryBuilder 2
SELECT OD.ProductID,
SUM(OD.Quantity) AS TotalQuantityOrdered,
AVG(OD.Discount) AS AverageDiscount
FROM [Order Details] AS OD WITH (FORCESCAN)
WHERE OD.Quantity > @pMAIN_2507192014395792120
GROUP BY OD.ProductID
ORDER BY TotalQuantityOrdered DESC;
Parameters (If used)
Name |
Value |
@pMAIN_2507192014395792120 |
5 |
Query Results 2:
|
ProductID |
TotalQuantityOrdered |
AverageDiscount |
1 |
60
|
1565
|
0.0648936179090054
|
2 |
59
|
1485
|
0.0510000010579824
|
3 |
31
|
1384
|
0.0608695662054031
|
4 |
56
|
1242
|
0.0644444454875257
|
5 |
16
|
1147
|
0.0730769246434554
|
6 |
75
|
1145
|
0.0500000009183274
|
7 |
24
|
1112
|
0.0604166674893349
|
8 |
40
|
1081
|
0.0529411772594732
|
9 |
62
|
1062
|
0.0559523817861364
|
10 |
71
|
1045
|
0.0473684216604421
|
11 |
2
|
1044
|
0.108536586892314
|
12 |
21
|
1003
|
0.058333334306048
|
13 |
17
|
976
|
0.0638888893235061
|
14 |
76
|
970
|
0.047222223236329
|
15 |
41
|
965
|
0.0441860470834166
|
16 |
55
|
882
|
0.0851851864545434
|
17 |
13
|
872
|
0.041176471640082
|
18 |
51
|
869
|
0.0500000008579456
|
19 |
35
|
865
|
0.0548387106147505
|
20 |
1
|
810
|
0.0757575769993392
|
21 |
36
|
795
|
0.0810344834522954
|
22 |
70
|
793
|
0.0666666675471898
|
23 |
68
|
787
|
0.0616666672130426
|
24 |
72
|
786
|
0.0281250005355105
|
25 |
39
|
777
|
0.0640000011026859
|
26 |
77
|
770
|
0.0437500007683411
|
27 |
33
|
751
|
0.0403225813661852
|
28 |
7
|
750
|
0.0240000005066395
|
29 |
26
|
741
|
0.0551724150006113
|
30 |
29
|
740
|
0.0600000003973643
|
31 |
54
|
740
|
0.0750000010011718
|
32 |
65
|
738
|
0.051666667809089
|
33 |
10
|
732
|
0.0500000010019746
|
34 |
64
|
731
|
0.0444444449687446
|
35 |
69
|
710
|
0.0793103458809442
|
36 |
53
|
709
|
0.0423076930814064
|
37 |
19
|
701
|
0.0612903231334302
|
38 |
11
|
686
|
0.057575758207928
|
39 |
42
|
684
|
0.0634615395504695
|
40 |
28
|
623
|
0.0375000006918396
|
41 |
38
|
607
|
0.0500000005587935
|
42 |
30
|
602
|
0.0660714290237852
|
43 |
44
|
599
|
0.0565217401346435
|
44 |
61
|
585
|
0.0850000016391277
|
45 |
23
|
573
|
0.0416666672875484
|
46 |
43
|
572
|
0.0538461547918045
|
47 |
58
|
534
|
0.100000001283156
|
48 |
18
|
531
|
0.072000000923872
|
49 |
46
|
528
|
0.0571428583491416
|
50 |
49
|
514
|
0.0263157902579559
|
51 |
34
|
506
|
0.0500000007450581
|
52 |
45
|
504
|
0.0807692325459077
|
53 |
52
|
478
|
0.0456521745933139
|
54 |
47
|
475
|
0.0815789479958384
|
55 |
4
|
447
|
0.0833333343681362
|
56 |
63
|
440
|
0.0437500006519258
|
57 |
57
|
423
|
0.0275000002235174
|
58 |
14
|
392
|
0.0666666674531168
|
59 |
8
|
370
|
0.0625000012417634
|
60 |
27
|
365
|
0.0277777777777778
|
61 |
22
|
344
|
0.0230769231342352
|
62 |
12
|
334
|
0.059090910310095
|
63 |
3
|
324
|
0.0181818184527484
|
64 |
25
|
304
|
0.103333334376415
|
65 |
20
|
302
|
0.0538461543619633
|
66 |
6
|
300
|
0.0318181819536469
|
67 |
5
|
294
|
0.0833333341611756
|
68 |
74
|
292
|
0.054166667163372
|
69 |
32
|
292
|
0.0846153861628129
|
70 |
73
|
288
|
0.0541666680946946
|
71 |
50
|
235
|
0.025000000372529
|
72 |
66
|
234
|
0.0416666679084301
|
73 |
67
|
176
|
0.0437500011175871
|
74 |
48
|
138
|
0.108333336810271
|
75 |
37
|
124
|
0.0600000008940697
|
76 |
15
|
117
|
0.0200000002980232
|
77 |
9
|
92
|
0.125000001862645
|
3. FORCESCAN to Avoid Complex Predicate Evaluations or SARGability Issues
SQL Server Query 3
SELECT
O.OrderID,
O.OrderDate,
DATENAME(weekday, O.OrderDate) AS OrderWeekday
FROM Orders AS O WITH (FORCESCAN) -- Force a scan (likely on OrderDate index or clustered index)
WHERE DATENAME(weekday, O.OrderDate) = 'Monday'
ORDER BY O.OrderDate;
Create SQL query with SqlQueryBuilder 3
var (sql3, parameters3) = new SqlQueryBuilder()
.Select()
.Columns("O.OrderID", "O.OrderDate")
.Column(new DATENAME(SqlDateInterval.weekday, new Column("O.OrderDate")), "OrderWeekday")
.From("Orders", "O", new List<IHint>() { new FORCESCAN() })
.Where(new Where(new DATENAME(SqlDateInterval.weekday, new Column("O.OrderDate")).Equale("Monday")))
.OrderBy(new OrderBy().SetColumnAscending("O.OrderDate"))
.Build();
Query build by SqlQueryBuilder 3
SELECT O.OrderID,
O.OrderDate,
DATENAME(weekday, O.OrderDate) AS OrderWeekday
FROM Orders AS O WITH (FORCESCAN)
WHERE DATENAME(weekday, O.OrderDate) = @pMAIN_2507192014395876160
ORDER BY O.OrderDate ASC;
Parameters (If used)
Name |
Value |
@pMAIN_2507192014395876160 |
Monday |
Query Results 3:
|
OrderID |
OrderDate |
OrderWeekday |
1 |
10250
|
7/8/1996 12:00:00 AM
|
Monday
|
2 |
10251
|
7/8/1996 12:00:00 AM
|
Monday
|
3 |
10256
|
7/15/1996 12:00:00 AM
|
Monday
|
4 |
10262
|
7/22/1996 12:00:00 AM
|
Monday
|
5 |
10267
|
7/29/1996 12:00:00 AM
|
Monday
|
6 |
10273
|
8/5/1996 12:00:00 AM
|
Monday
|
7 |
10278
|
8/12/1996 12:00:00 AM
|
Monday
|
8 |
10284
|
8/19/1996 12:00:00 AM
|
Monday
|
9 |
10289
|
8/26/1996 12:00:00 AM
|
Monday
|
10 |
10295
|
9/2/1996 12:00:00 AM
|
Monday
|
11 |
10300
|
9/9/1996 12:00:00 AM
|
Monday
|
12 |
10301
|
9/9/1996 12:00:00 AM
|
Monday
|
13 |
10306
|
9/16/1996 12:00:00 AM
|
Monday
|
14 |
10312
|
9/23/1996 12:00:00 AM
|
Monday
|
15 |
10317
|
9/30/1996 12:00:00 AM
|
Monday
|
16 |
10323
|
10/7/1996 12:00:00 AM
|
Monday
|
17 |
10328
|
10/14/1996 12:00:00 AM
|
Monday
|
18 |
10334
|
10/21/1996 12:00:00 AM
|
Monday
|
19 |
10339
|
10/28/1996 12:00:00 AM
|
Monday
|
20 |
10345
|
11/4/1996 12:00:00 AM
|
Monday
|
21 |
10350
|
11/11/1996 12:00:00 AM
|
Monday
|
22 |
10351
|
11/11/1996 12:00:00 AM
|
Monday
|
23 |
10356
|
11/18/1996 12:00:00 AM
|
Monday
|
24 |
10362
|
11/25/1996 12:00:00 AM
|
Monday
|
25 |
10369
|
12/2/1996 12:00:00 AM
|
Monday
|
26 |
10376
|
12/9/1996 12:00:00 AM
|
Monday
|
27 |
10377
|
12/9/1996 12:00:00 AM
|
Monday
|
28 |
10383
|
12/16/1996 12:00:00 AM
|
Monday
|
29 |
10384
|
12/16/1996 12:00:00 AM
|
Monday
|
30 |
10390
|
12/23/1996 12:00:00 AM
|
Monday
|
31 |
10391
|
12/23/1996 12:00:00 AM
|
Monday
|
32 |
10398
|
12/30/1996 12:00:00 AM
|
Monday
|
33 |
10405
|
1/6/1997 12:00:00 AM
|
Monday
|
34 |
10412
|
1/13/1997 12:00:00 AM
|
Monday
|
35 |
10419
|
1/20/1997 12:00:00 AM
|
Monday
|
36 |
10426
|
1/27/1997 12:00:00 AM
|
Monday
|
37 |
10427
|
1/27/1997 12:00:00 AM
|
Monday
|
38 |
10433
|
2/3/1997 12:00:00 AM
|
Monday
|
39 |
10434
|
2/3/1997 12:00:00 AM
|
Monday
|
40 |
10440
|
2/10/1997 12:00:00 AM
|
Monday
|
41 |
10441
|
2/10/1997 12:00:00 AM
|
Monday
|
42 |
10448
|
2/17/1997 12:00:00 AM
|
Monday
|
43 |
10455
|
2/24/1997 12:00:00 AM
|
Monday
|
44 |
10462
|
3/3/1997 12:00:00 AM
|
Monday
|
45 |
10469
|
3/10/1997 12:00:00 AM
|
Monday
|
46 |
10476
|
3/17/1997 12:00:00 AM
|
Monday
|
47 |
10477
|
3/17/1997 12:00:00 AM
|
Monday
|
48 |
10483
|
3/24/1997 12:00:00 AM
|
Monday
|
49 |
10484
|
3/24/1997 12:00:00 AM
|
Monday
|
50 |
10490
|
3/31/1997 12:00:00 AM
|
Monday
|
51 |
10491
|
3/31/1997 12:00:00 AM
|
Monday
|
52 |
10498
|
4/7/1997 12:00:00 AM
|
Monday
|
53 |
10505
|
4/14/1997 12:00:00 AM
|
Monday
|
54 |
10512
|
4/21/1997 12:00:00 AM
|
Monday
|
55 |
10519
|
4/28/1997 12:00:00 AM
|
Monday
|
56 |
10526
|
5/5/1997 12:00:00 AM
|
Monday
|
57 |
10527
|
5/5/1997 12:00:00 AM
|
Monday
|
58 |
10533
|
5/12/1997 12:00:00 AM
|
Monday
|
59 |
10534
|
5/12/1997 12:00:00 AM
|
Monday
|
60 |
10540
|
5/19/1997 12:00:00 AM
|
Monday
|
61 |
10541
|
5/19/1997 12:00:00 AM
|
Monday
|
62 |
10548
|
5/26/1997 12:00:00 AM
|
Monday
|
63 |
10555
|
6/2/1997 12:00:00 AM
|
Monday
|
64 |
10562
|
6/9/1997 12:00:00 AM
|
Monday
|
65 |
10569
|
6/16/1997 12:00:00 AM
|
Monday
|
66 |
10576
|
6/23/1997 12:00:00 AM
|
Monday
|
67 |
10577
|
6/23/1997 12:00:00 AM
|
Monday
|
68 |
10583
|
6/30/1997 12:00:00 AM
|
Monday
|
69 |
10584
|
6/30/1997 12:00:00 AM
|
Monday
|
70 |
10590
|
7/7/1997 12:00:00 AM
|
Monday
|
71 |
10591
|
7/7/1997 12:00:00 AM
|
Monday
|
72 |
10598
|
7/14/1997 12:00:00 AM
|
Monday
|
73 |
10605
|
7/21/1997 12:00:00 AM
|
Monday
|
74 |
10612
|
7/28/1997 12:00:00 AM
|
Monday
|
75 |
10619
|
8/4/1997 12:00:00 AM
|
Monday
|
76 |
10626
|
8/11/1997 12:00:00 AM
|
Monday
|
77 |
10627
|
8/11/1997 12:00:00 AM
|
Monday
|
78 |
10635
|
8/18/1997 12:00:00 AM
|
Monday
|
79 |
10643
|
8/25/1997 12:00:00 AM
|
Monday
|
80 |
10644
|
8/25/1997 12:00:00 AM
|
Monday
|
81 |
10651
|
9/1/1997 12:00:00 AM
|
Monday
|
82 |
10652
|
9/1/1997 12:00:00 AM
|
Monday
|
83 |
10660
|
9/8/1997 12:00:00 AM
|
Monday
|
84 |
10668
|
9/15/1997 12:00:00 AM
|
Monday
|
85 |
10669
|
9/15/1997 12:00:00 AM
|
Monday
|
86 |
10676
|
9/22/1997 12:00:00 AM
|
Monday
|
87 |
10677
|
9/22/1997 12:00:00 AM
|
Monday
|
88 |
10685
|
9/29/1997 12:00:00 AM
|
Monday
|
89 |
10693
|
10/6/1997 12:00:00 AM
|
Monday
|
90 |
10694
|
10/6/1997 12:00:00 AM
|
Monday
|
91 |
10701
|
10/13/1997 12:00:00 AM
|
Monday
|
92 |
10702
|
10/13/1997 12:00:00 AM
|
Monday
|
93 |
10710
|
10/20/1997 12:00:00 AM
|
Monday
|
94 |
10718
|
10/27/1997 12:00:00 AM
|
Monday
|
95 |
10719
|
10/27/1997 12:00:00 AM
|
Monday
|
96 |
10726
|
11/3/1997 12:00:00 AM
|
Monday
|
97 |
10727
|
11/3/1997 12:00:00 AM
|
Monday
|
98 |
10735
|
11/10/1997 12:00:00 AM
|
Monday
|
99 |
10743
|
11/17/1997 12:00:00 AM
|
Monday
|
100 |
10744
|
11/17/1997 12:00:00 AM
|
Monday
|
101 |
10751
|
11/24/1997 12:00:00 AM
|
Monday
|
102 |
10752
|
11/24/1997 12:00:00 AM
|
Monday
|
103 |
10760
|
12/1/1997 12:00:00 AM
|
Monday
|
104 |
10768
|
12/8/1997 12:00:00 AM
|
Monday
|
105 |
10769
|
12/8/1997 12:00:00 AM
|
Monday
|
106 |
10776
|
12/15/1997 12:00:00 AM
|
Monday
|
107 |
10777
|
12/15/1997 12:00:00 AM
|
Monday
|
108 |
10788
|
12/22/1997 12:00:00 AM
|
Monday
|
109 |
10789
|
12/22/1997 12:00:00 AM
|
Monday
|
110 |
10790
|
12/22/1997 12:00:00 AM
|
Monday
|
111 |
10801
|
12/29/1997 12:00:00 AM
|
Monday
|
112 |
10802
|
12/29/1997 12:00:00 AM
|
Monday
|
113 |
10813
|
1/5/1998 12:00:00 AM
|
Monday
|
114 |
10814
|
1/5/1998 12:00:00 AM
|
Monday
|
115 |
10815
|
1/5/1998 12:00:00 AM
|
Monday
|
116 |
10826
|
1/12/1998 12:00:00 AM
|
Monday
|
117 |
10827
|
1/12/1998 12:00:00 AM
|
Monday
|
118 |
10838
|
1/19/1998 12:00:00 AM
|
Monday
|
119 |
10839
|
1/19/1998 12:00:00 AM
|
Monday
|
120 |
10840
|
1/19/1998 12:00:00 AM
|
Monday
|
121 |
10851
|
1/26/1998 12:00:00 AM
|
Monday
|
122 |
10852
|
1/26/1998 12:00:00 AM
|
Monday
|
123 |
10863
|
2/2/1998 12:00:00 AM
|
Monday
|
124 |
10864
|
2/2/1998 12:00:00 AM
|
Monday
|
125 |
10865
|
2/2/1998 12:00:00 AM
|
Monday
|
126 |
10876
|
2/9/1998 12:00:00 AM
|
Monday
|
127 |
10877
|
2/9/1998 12:00:00 AM
|
Monday
|
128 |
10888
|
2/16/1998 12:00:00 AM
|
Monday
|
129 |
10889
|
2/16/1998 12:00:00 AM
|
Monday
|
130 |
10890
|
2/16/1998 12:00:00 AM
|
Monday
|
131 |
10901
|
2/23/1998 12:00:00 AM
|
Monday
|
132 |
10902
|
2/23/1998 12:00:00 AM
|
Monday
|
133 |
10917
|
3/2/1998 12:00:00 AM
|
Monday
|
134 |
10918
|
3/2/1998 12:00:00 AM
|
Monday
|
135 |
10919
|
3/2/1998 12:00:00 AM
|
Monday
|
136 |
10934
|
3/9/1998 12:00:00 AM
|
Monday
|
137 |
10935
|
3/9/1998 12:00:00 AM
|
Monday
|
138 |
10936
|
3/9/1998 12:00:00 AM
|
Monday
|
139 |
10950
|
3/16/1998 12:00:00 AM
|
Monday
|
140 |
10951
|
3/16/1998 12:00:00 AM
|
Monday
|
141 |
10952
|
3/16/1998 12:00:00 AM
|
Monday
|
142 |
10953
|
3/16/1998 12:00:00 AM
|
Monday
|
143 |
10967
|
3/23/1998 12:00:00 AM
|
Monday
|
144 |
10968
|
3/23/1998 12:00:00 AM
|
Monday
|
145 |
10969
|
3/23/1998 12:00:00 AM
|
Monday
|
146 |
10984
|
3/30/1998 12:00:00 AM
|
Monday
|
147 |
10985
|
3/30/1998 12:00:00 AM
|
Monday
|
148 |
10986
|
3/30/1998 12:00:00 AM
|
Monday
|
149 |
11000
|
4/6/1998 12:00:00 AM
|
Monday
|
150 |
11001
|
4/6/1998 12:00:00 AM
|
Monday
|
151 |
11002
|
4/6/1998 12:00:00 AM
|
Monday
|
152 |
11003
|
4/6/1998 12:00:00 AM
|
Monday
|
153 |
11017
|
4/13/1998 12:00:00 AM
|
Monday
|
154 |
11018
|
4/13/1998 12:00:00 AM
|
Monday
|
155 |
11019
|
4/13/1998 12:00:00 AM
|
Monday
|
156 |
11034
|
4/20/1998 12:00:00 AM
|
Monday
|
157 |
11035
|
4/20/1998 12:00:00 AM
|
Monday
|
158 |
11036
|
4/20/1998 12:00:00 AM
|
Monday
|
159 |
11050
|
4/27/1998 12:00:00 AM
|
Monday
|
160 |
11051
|
4/27/1998 12:00:00 AM
|
Monday
|
161 |
11052
|
4/27/1998 12:00:00 AM
|
Monday
|
162 |
11053
|
4/27/1998 12:00:00 AM
|
Monday
|
163 |
11067
|
5/4/1998 12:00:00 AM
|
Monday
|
164 |
11068
|
5/4/1998 12:00:00 AM
|
Monday
|
165 |
11069
|
5/4/1998 12:00:00 AM
|
Monday
|
4. FORCESCAN for a Full Table Read in a Join Context
SQL Server Query 4
SELECT
C.CompanyName,
O.OrderID,
O.OrderDate
FROM Customers AS C WITH (FORCESCAN) -- Force a scan on the Customers table
JOIN Orders AS O ON C.CustomerID = O.CustomerID
WHERE O.OrderDate BETWEEN '1997-01-01' AND '1997-03-31'
ORDER BY C.CompanyName, O.OrderDate;
Create SQL query with SqlQueryBuilder 4
var (sql4, parameters4) = new SqlQueryBuilder()
.Select()
.Columns("C.CompanyName","O.OrderID","O.OrderDate")
.From("Customers","C", new List<IHint>() { new FORCESCAN() })
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("Orders", "O")
.On(new Column("C.CustomerID").Equale(new Column("O.CustomerID")))
})
.Where(new Where(new BETWEEN(new Column("O.OrderDate"), "1997-01-01", "1997-03-31")))
.OrderBy(new OrderBy()
.SetColumnAscending("C.CompanyName")
.SetColumnAscending("O.OrderDate"))
.Build();
Query build by SqlQueryBuilder 4
SELECT C.CompanyName,
O.OrderID,
O.OrderDate
FROM Customers AS C WITH (FORCESCAN)
INNER JOIN
Orders AS O
ON C.CustomerID = O.CustomerID
WHERE O.OrderDate BETWEEN @pMAIN_2507192014395972000 AND @pMAIN_2507192014395972001
ORDER BY C.CompanyName ASC, O.OrderDate ASC;
Parameters (If used)
Name |
Value |
@pMAIN_2507192014395972000 |
1997-01-01 |
@pMAIN_2507192014395972001 |
1997-03-31 |
Query Results 4:
|
CompanyName |
OrderID |
OrderDate |
1 |
Around the Horn
|
10453
|
2/21/1997 12:00:00 AM
|
2 |
Berglunds snabbköp
|
10444
|
2/12/1997 12:00:00 AM
|
3 |
Berglunds snabbköp
|
10445
|
2/13/1997 12:00:00 AM
|
4 |
Blondesddsl père et fils
|
10436
|
2/5/1997 12:00:00 AM
|
5 |
Blondesddsl père et fils
|
10449
|
2/18/1997 12:00:00 AM
|
6 |
Bon app'
|
10470
|
3/11/1997 12:00:00 AM
|
7 |
Bottom-Dollar Markets
|
10410
|
1/10/1997 12:00:00 AM
|
8 |
Bottom-Dollar Markets
|
10411
|
1/10/1997 12:00:00 AM
|
9 |
Bottom-Dollar Markets
|
10431
|
1/30/1997 12:00:00 AM
|
10 |
B's Beverages
|
10471
|
3/11/1997 12:00:00 AM
|
11 |
B's Beverages
|
10484
|
3/24/1997 12:00:00 AM
|
12 |
Comércio Mineiro
|
10466
|
3/6/1997 12:00:00 AM
|
13 |
Consolidated Holdings
|
10435
|
2/4/1997 12:00:00 AM
|
14 |
Consolidated Holdings
|
10462
|
3/3/1997 12:00:00 AM
|
15 |
Eastern Connection
|
10400
|
1/1/1997 12:00:00 AM
|
16 |
Ernst Handel
|
10402
|
1/2/1997 12:00:00 AM
|
17 |
Ernst Handel
|
10403
|
1/3/1997 12:00:00 AM
|
18 |
Ernst Handel
|
10430
|
1/30/1997 12:00:00 AM
|
19 |
Ernst Handel
|
10442
|
2/11/1997 12:00:00 AM
|
20 |
Familia Arquibaldo
|
10414
|
1/14/1997 12:00:00 AM
|
21 |
Folies gourmandes
|
10408
|
1/8/1997 12:00:00 AM
|
22 |
Folies gourmandes
|
10480
|
3/20/1997 12:00:00 AM
|
23 |
Folk och fä HB
|
10434
|
2/3/1997 12:00:00 AM
|
24 |
Folk och fä HB
|
10460
|
2/28/1997 12:00:00 AM
|
25 |
Franchi S.p.A.
|
10422
|
1/22/1997 12:00:00 AM
|
26 |
Frankenversand
|
10488
|
3/27/1997 12:00:00 AM
|
27 |
Furia Bacalhau e Frutos do Mar
|
10464
|
3/4/1997 12:00:00 AM
|
28 |
Furia Bacalhau e Frutos do Mar
|
10491
|
3/31/1997 12:00:00 AM
|
29 |
Galería del gastrónomo
|
10426
|
1/27/1997 12:00:00 AM
|
30 |
Gourmet Lanchonetes
|
10423
|
1/23/1997 12:00:00 AM
|
31 |
HILARION-Abastos
|
10476
|
3/17/1997 12:00:00 AM
|
32 |
HILARION-Abastos
|
10486
|
3/26/1997 12:00:00 AM
|
33 |
HILARION-Abastos
|
10490
|
3/31/1997 12:00:00 AM
|
34 |
Hungry Coyote Import Store
|
10415
|
1/15/1997 12:00:00 AM
|
35 |
Hungry Owl All-Night Grocers
|
10429
|
1/29/1997 12:00:00 AM
|
36 |
Island Trading
|
10473
|
3/13/1997 12:00:00 AM
|
37 |
Königlich Essen
|
10456
|
2/25/1997 12:00:00 AM
|
38 |
Königlich Essen
|
10457
|
2/25/1997 12:00:00 AM
|
39 |
Königlich Essen
|
10468
|
3/7/1997 12:00:00 AM
|
40 |
La maison d'Asie
|
10413
|
1/14/1997 12:00:00 AM
|
41 |
La maison d'Asie
|
10425
|
1/24/1997 12:00:00 AM
|
42 |
La maison d'Asie
|
10454
|
2/21/1997 12:00:00 AM
|
43 |
Lazy K Kountry Store
|
10482
|
3/21/1997 12:00:00 AM
|
44 |
LILA-Supermercado
|
10461
|
2/28/1997 12:00:00 AM
|
45 |
LINO-Delicateses
|
10405
|
1/6/1997 12:00:00 AM
|
46 |
LINO-Delicateses
|
10485
|
3/25/1997 12:00:00 AM
|
47 |
Magazzini Alimentari Riuniti
|
10404
|
1/3/1997 12:00:00 AM
|
48 |
Magazzini Alimentari Riuniti
|
10467
|
3/6/1997 12:00:00 AM
|
49 |
Mère Paillarde
|
10424
|
1/23/1997 12:00:00 AM
|
50 |
Mère Paillarde
|
10439
|
2/7/1997 12:00:00 AM
|
51 |
Océano Atlántico Ltda.
|
10409
|
1/9/1997 12:00:00 AM
|
52 |
Old World Delicatessen
|
10441
|
2/10/1997 12:00:00 AM
|
53 |
Ottilies Käseladen
|
10407
|
1/7/1997 12:00:00 AM
|
54 |
Pericles Comidas clásicas
|
10474
|
3/13/1997 12:00:00 AM
|
55 |
Piccolo und mehr
|
10427
|
1/27/1997 12:00:00 AM
|
56 |
Piccolo und mehr
|
10489
|
3/28/1997 12:00:00 AM
|
57 |
Princesa Isabel Vinhos
|
10433
|
2/3/1997 12:00:00 AM
|
58 |
Princesa Isabel Vinhos
|
10477
|
3/17/1997 12:00:00 AM
|
59 |
Que Delícia
|
10421
|
1/21/1997 12:00:00 AM
|
60 |
Queen Cozinha
|
10406
|
1/7/1997 12:00:00 AM
|
61 |
Queen Cozinha
|
10487
|
3/26/1997 12:00:00 AM
|
62 |
QUICK-Stop
|
10418
|
1/17/1997 12:00:00 AM
|
63 |
QUICK-Stop
|
10451
|
2/19/1997 12:00:00 AM
|
64 |
Rancho grande
|
10448
|
2/17/1997 12:00:00 AM
|
65 |
Rattlesnake Canyon Grocery
|
10401
|
1/1/1997 12:00:00 AM
|
66 |
Rattlesnake Canyon Grocery
|
10479
|
3/19/1997 12:00:00 AM
|
67 |
Reggiani Caseifici
|
10428
|
1/28/1997 12:00:00 AM
|
68 |
Reggiani Caseifici
|
10443
|
2/12/1997 12:00:00 AM
|
69 |
Ricardo Adocicados
|
10447
|
2/14/1997 12:00:00 AM
|
70 |
Ricardo Adocicados
|
10481
|
3/20/1997 12:00:00 AM
|
71 |
Richter Supermarkt
|
10419
|
1/20/1997 12:00:00 AM
|
72 |
Save-a-lot Markets
|
10440
|
2/10/1997 12:00:00 AM
|
73 |
Save-a-lot Markets
|
10452
|
2/20/1997 12:00:00 AM
|
74 |
Seven Seas Imports
|
10472
|
3/12/1997 12:00:00 AM
|
75 |
Simons bistro
|
10417
|
1/16/1997 12:00:00 AM
|
76 |
Split Rail Beer & Ale
|
10432
|
1/31/1997 12:00:00 AM
|
77 |
Suprêmes délices
|
10458
|
2/26/1997 12:00:00 AM
|
78 |
Suprêmes délices
|
10463
|
3/4/1997 12:00:00 AM
|
79 |
Suprêmes délices
|
10475
|
3/14/1997 12:00:00 AM
|
80 |
Toms Spezialitäten
|
10438
|
2/6/1997 12:00:00 AM
|
81 |
Toms Spezialitäten
|
10446
|
2/14/1997 12:00:00 AM
|
82 |
Vaffeljernet
|
10465
|
3/5/1997 12:00:00 AM
|
83 |
Victuailles en stock
|
10450
|
2/19/1997 12:00:00 AM
|
84 |
Victuailles en stock
|
10459
|
2/27/1997 12:00:00 AM
|
85 |
Victuailles en stock
|
10478
|
3/18/1997 12:00:00 AM
|
86 |
Wartian Herkku
|
10412
|
1/13/1997 12:00:00 AM
|
87 |
Wartian Herkku
|
10416
|
1/16/1997 12:00:00 AM
|
88 |
Wartian Herkku
|
10437
|
2/5/1997 12:00:00 AM
|
89 |
Wartian Herkku
|
10455
|
2/24/1997 12:00:00 AM
|
90 |
Wellington Importadora
|
10420
|
1/21/1997 12:00:00 AM
|
91 |
White Clover Markets
|
10469
|
3/10/1997 12:00:00 AM
|
92 |
White Clover Markets
|
10483
|
3/24/1997 12:00:00 AM
|
5. FORCESCAN on a Large Table with a Non-Selective Join Condition
SQL Server Query 5
SELECT
P.ProductName,
OD.OrderID,
OD.Quantity
FROM Products AS P
JOIN [Order Details] AS OD WITH (FORCESCAN) -- Force a scan on the Order Details table
ON P.ProductID = OD.ProductID
WHERE OD.ProductID IN (1, 2, 3, 4, 5);
Create SQL query with SqlQueryBuilder 5
var (sql5, parameters5) = new SqlQueryBuilder()
.Select()
.Columns("P.ProductName", "OD.OrderID", "OD.Quantity")
.From("Products", "P")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("[Order Details]", "OD", new List<IHint>() { new FORCESCAN() })
.On(new Column("P.ProductID").Equale(new Column("OD.ProductID")))
})
.Where(new Where(new IN(new Column("OD.ProductID"), 1, 2, 3, 4, 5)))
.Build();
Query build by SqlQueryBuilder 5
SELECT P.ProductName,
OD.OrderID,
OD.Quantity
FROM Products AS P
INNER JOIN
[Order Details] AS OD WITH (FORCESCAN)
ON P.ProductID = OD.ProductID
WHERE OD.ProductID IN (@pMAIN_2507192014396070860, @pMAIN_2507192014396070861, @pMAIN_2507192014396070862, @pMAIN_2507192014396070863, @pMAIN_2507192014396070864);
Parameters (If used)
Name |
Value |
@pMAIN_2507192014396070860 |
1 |
@pMAIN_2507192014396070861 |
2 |
@pMAIN_2507192014396070862 |
3 |
@pMAIN_2507192014396070863 |
4 |
@pMAIN_2507192014396070864 |
5 |
Query Results 5:
|
ProductName |
OrderID |
Quantity |
1 |
Chai
|
10285
|
45
|
2 |
Chai
|
10294
|
18
|
3 |
Chai
|
10317
|
20
|
4 |
Chai
|
10348
|
15
|
5 |
Chai
|
10354
|
12
|
6 |
Chai
|
10370
|
15
|
7 |
Chai
|
10406
|
10
|
8 |
Chai
|
10413
|
24
|
9 |
Chai
|
10477
|
15
|
10 |
Chai
|
10522
|
40
|
11 |
Chai
|
10526
|
8
|
12 |
Chai
|
10576
|
10
|
13 |
Chai
|
10590
|
20
|
14 |
Chai
|
10609
|
3
|
15 |
Chai
|
10611
|
6
|
16 |
Chai
|
10628
|
25
|
17 |
Chai
|
10646
|
15
|
18 |
Chai
|
10689
|
35
|
19 |
Chai
|
10691
|
30
|
20 |
Chai
|
10700
|
5
|
21 |
Chai
|
10729
|
50
|
22 |
Chai
|
10752
|
8
|
23 |
Chai
|
10838
|
4
|
24 |
Chai
|
10847
|
80
|
25 |
Chai
|
10863
|
20
|
26 |
Chai
|
10869
|
40
|
27 |
Chai
|
10905
|
20
|
28 |
Chai
|
10911
|
10
|
29 |
Chai
|
10918
|
60
|
30 |
Chai
|
10935
|
21
|
31 |
Chai
|
11003
|
4
|
32 |
Chai
|
11005
|
2
|
33 |
Chai
|
11006
|
8
|
34 |
Chai
|
11025
|
10
|
35 |
Chai
|
11031
|
45
|
36 |
Chai
|
11035
|
10
|
37 |
Chai
|
11047
|
25
|
38 |
Chai
|
11070
|
40
|
39 |
Chang
|
11070
|
20
|
40 |
Chang
|
11072
|
8
|
41 |
Chang
|
11075
|
10
|
42 |
Chang
|
11077
|
24
|
43 |
Chang
|
11041
|
30
|
44 |
Chang
|
11021
|
11
|
45 |
Chang
|
11049
|
10
|
46 |
Chang
|
11030
|
100
|
47 |
Chang
|
10991
|
50
|
48 |
Chang
|
10939
|
10
|
49 |
Chang
|
10885
|
20
|
50 |
Chang
|
10888
|
20
|
51 |
Chang
|
10866
|
21
|
52 |
Chang
|
10641
|
50
|
53 |
Chang
|
10851
|
5
|
54 |
Chang
|
10852
|
15
|
55 |
Chang
|
10856
|
20
|
56 |
Chang
|
10766
|
40
|
57 |
Chang
|
10787
|
15
|
58 |
Chang
|
10792
|
10
|
59 |
Chang
|
10806
|
20
|
60 |
Chang
|
10813
|
12
|
61 |
Chang
|
10829
|
10
|
62 |
Chang
|
10741
|
15
|
63 |
Chang
|
10703
|
5
|
64 |
Chang
|
10714
|
30
|
65 |
Chang
|
10722
|
3
|
66 |
Chang
|
10632
|
30
|
67 |
Chang
|
10611
|
10
|
68 |
Chang
|
10622
|
20
|
69 |
Chang
|
10485
|
20
|
70 |
Chang
|
10504
|
12
|
71 |
Chang
|
10393
|
25
|
72 |
Chang
|
10264
|
35
|
73 |
Chang
|
10469
|
40
|
74 |
Chang
|
10418
|
60
|
75 |
Chang
|
10435
|
10
|
76 |
Chang
|
10440
|
45
|
77 |
Chang
|
10342
|
24
|
78 |
Chang
|
10327
|
25
|
79 |
Chang
|
10335
|
7
|
80 |
Chang
|
10298
|
40
|
81 |
Chang
|
10255
|
20
|
82 |
Chang
|
10258
|
50
|
83 |
Aniseed Syrup
|
10289
|
30
|
84 |
Aniseed Syrup
|
10405
|
50
|
85 |
Aniseed Syrup
|
10485
|
20
|
86 |
Aniseed Syrup
|
10591
|
14
|
87 |
Aniseed Syrup
|
10742
|
20
|
88 |
Aniseed Syrup
|
10764
|
20
|
89 |
Aniseed Syrup
|
10702
|
6
|
90 |
Aniseed Syrup
|
10540
|
60
|
91 |
Aniseed Syrup
|
10857
|
30
|
92 |
Aniseed Syrup
|
10849
|
49
|
93 |
Aniseed Syrup
|
11017
|
25
|
94 |
Aniseed Syrup
|
11077
|
4
|
95 |
Chef Anton's Cajun Seasoning
|
11077
|
1
|
96 |
Chef Anton's Cajun Seasoning
|
11000
|
25
|
97 |
Chef Anton's Cajun Seasoning
|
10913
|
30
|
98 |
Chef Anton's Cajun Seasoning
|
10950
|
5
|
99 |
Chef Anton's Cajun Seasoning
|
10846
|
21
|
100 |
Chef Anton's Cajun Seasoning
|
10636
|
25
|
101 |
Chef Anton's Cajun Seasoning
|
10654
|
12
|
102 |
Chef Anton's Cajun Seasoning
|
10726
|
25
|
103 |
Chef Anton's Cajun Seasoning
|
10704
|
6
|
104 |
Chef Anton's Cajun Seasoning
|
10606
|
20
|
105 |
Chef Anton's Cajun Seasoning
|
10527
|
50
|
106 |
Chef Anton's Cajun Seasoning
|
10533
|
50
|
107 |
Chef Anton's Cajun Seasoning
|
10635
|
10
|
108 |
Chef Anton's Cajun Seasoning
|
10511
|
50
|
109 |
Chef Anton's Cajun Seasoning
|
10464
|
16
|
110 |
Chef Anton's Cajun Seasoning
|
10309
|
20
|
111 |
Chef Anton's Cajun Seasoning
|
10336
|
18
|
112 |
Chef Anton's Cajun Seasoning
|
10339
|
10
|
113 |
Chef Anton's Cajun Seasoning
|
10344
|
35
|
114 |
Chef Anton's Cajun Seasoning
|
10326
|
24
|
115 |
Chef Anton's Gumbo Mix
|
10290
|
20
|
116 |
Chef Anton's Gumbo Mix
|
10258
|
65
|
117 |
Chef Anton's Gumbo Mix
|
10262
|
12
|
118 |
Chef Anton's Gumbo Mix
|
10382
|
32
|
119 |
Chef Anton's Gumbo Mix
|
10635
|
15
|
120 |
Chef Anton's Gumbo Mix
|
10708
|
4
|
121 |
Chef Anton's Gumbo Mix
|
10848
|
30
|
122 |
Chef Anton's Gumbo Mix
|
10958
|
20
|
123 |
Chef Anton's Gumbo Mix
|
11030
|
70
|
124 |
Chef Anton's Gumbo Mix
|
11047
|
30
|