我試圖優化在生產中花費很長時間的查詢。目標是根據匹配的字段值標準查找重複記錄,然後刪除它們。當前查詢通過t1.col1 = t2.col1上的內部連接使用自連接,然後使用where子句檢查值。檢查重複項時最佳自加入方法
select * from table t1
inner join table t2 on t1.col1 = t2.col1
where t1.col2 = t2.col2 ...
什麼是更好的方法來做到這一點?或者是基於索引的全部相同?也許
select * from table t1, table t2
where t1.col1 = t2.col1, t2.col2 = t2.col2 ...
這張表有100m +行。
MS SQL,SQL Server 2008企業
select distinct t2.id
from table1 t1 with (nolock)
inner join table1 t2 with (nolock) on t1.ckid=t2.ckid
left join table2 t3 on t1.cid = t3.cid and t1.typeid = t3.typeid
where
t2.id > @Max_id and
t2.timestamp > t1.timestamp and
t2.rid = 2 and
isnull(t1.col1,'') = isnull(t2.col1,'') and
isnull(t1.cid,-1) = isnull(t2.cid,-1) and
isnull(t1.rid,-1) = isnull(t2.rid,-1)and
isnull(t1.typeid,-1) = isnull(t2.typeid,-1) and
isnull(t1.cktypeid,-1) = isnull(t2.cktypeid,-1) and
isnull(t1.oid,'') = isnull(t2.oid,'') and
isnull(t1.stypeid,-1) = isnull(t2.stypeid,-1)
and (
(
t3.uniqueoid = 1
)
or
(
t3.uniqueoid is null and
isnull(t1.col1,'') = isnull(t2.col1,'') and
isnull(t1.col2,'') = isnull(t2.col2,'') and
isnull(t1.rdid,-1) = isnull(t2.rdid,-1) and
isnull(t1.stid,-1) = isnull(t2.stid,-1) and
isnull(t1.huaid,-1) = isnull(t2.huaid,-1) and
isnull(t1.lpid,-1) = isnull(t2.lpid,-1) and
isnull(t1.col3,-1) = isnull(t2.col3,-1)
)
)
MS SQL?如果是這樣,哪個版本的SQL Server? – 2011-05-02 15:50:24
@布魯諾抱歉,我更新了問題和標籤 – 2011-05-02 15:52:12
@Mitch不是它加入同一張桌子的一張桌子。它怎麼不是一個自我加入? – 2011-05-02 15:56:54