我有一个问题:
SELECT c.somecolumn,p.someothercolumn
FROM table1 co
INNER JOIN table2 p(NOLOCK) ON co.COLUMN = p.COLUMN
INNER JOIN table3 c(NOLOCK) ON co.column11 = c.column11
WHERE co.filterColumn = 1
Table2是一个联结表,table1和table2之间的连接位于没有不同值的列上(这是要求且无法更改),因此存在交叉连接。
此查询的输出会产生1.8亿条记录。
记录计数:
table 1: 2 190 561
table 2: 568 277
table 3: 300 150
答案 0 :(得分:0)
确保至少在连接中的列上包含索引,这些索引包含您要返回的列(例如,在表2中,您应该有一个非聚集索引,该索引键入“p.COLUMN”并包含“p.someothercolumn”。对于表3,键入c.column11并包含c.somecolumn。你应该在table1.filtercolumn上有一个索引。 还要考虑到,您必须向调用者返回1.8亿行,这需要时间。尝试将该数据插入到一次性表中,只是为了使网络加载时间超出您的等式。
答案 1 :(得分:0)
这些理想情况下可能是所需的索引:
答案 2 :(得分:0)
SELECT c.somecolumn
,tmp.someothercolumn
FROM table1 co
INNER JOIN table3 c(NOLOCK) ON co.column11 = c.column11
AND co.filterColumn = 1
CROSS APPLY (SELECT TOP (1) p.SomeOtherColumn
FROM table2 p(NOLOCK)
WHERE p.COLUMN = co.Column) tmp