sql server即使在加载1小时后也无法执行重复查询

时间:2012-07-06 09:37:07

标签: sql sql-server

我有一个查询如下,在我的表中查找重复项,其中包含超过10,00,000个数据,包含10个字段。当我尝试执行查询时,它会继续加载和加载超过一个小时,但它无法完成执行。 当我尝试使用只有100条记录的类似表格进行相同的查询时,它可以正常工作。

(所有列数据类型都是nchar)

我想知道如何将其用于超过10,00,000的数据。

select * from table1 as L
where (select count(*) from table1
where L.date + L.time + L.color + L.supplier = table1.date +
table1.time + table1.color + table.supplier and table1.variety = 'dark' 
and date between '01062012' and '30062012') > 1

3 个答案:

答案 0 :(得分:1)

不要 使用L.date + L.time + L.color + L.supplier = table1.date + table1.time + table1.color + table.supplier这样做会使MURDER能够在联接中使用索引。

select * from table1 as L
where (select count(*)
         from table1
        where table1.date       = L.date
          and table1.color      = L.color
          and table1.supplier   = L.supplier
          and table1.variety    = 'dark'
          and table1.date between '01062012' and '30062012'
     )
     > 1

另外,请确保您的表格的索引涵盖所有加入字段(品种,颜色,供应商,日期)

还有其他选项可用于查找重复项,例如使用ROW_NUMBER(),但我们需要了解有关您的表结构(唯一ID字段等)的更多信息以及构成重复项的内容(以及不构成重复项)。

答案 1 :(得分:0)

不确定你的表结构。似乎在极端负载下你的桌子被锁定了。尝试下面提到的一些提示。

APART从此尝试删除*并读取执行所需的记录。

select * from table1 as L WITH(NOLOCK)
where (select count(1) from table1 WITH(NOLOCK)
where L.date + L.time + L.color + L.supplier = table1.date +
table1.time + table1.color + table.supplier and table1.variety = 'dark' 
and date between '01062012' and '30062012') > 1

希望它能解决你的问题。

干杯

答案 2 :(得分:0)

我是新手,我的建议可能不合适,但如果在你的位置,我会使用SSIS。我会在ssis中使用脚本组件并执行操作