簡體   English   中英

如何通過 sql 語句優化這個嵌套組?

[英]How do I optimize this nested group by sql statement?

編輯:剛剛更改了最后一個 sql 語句上的別名,因此它們是不同的和清晰的 - 在嵌套語句中有a重復的。

一些上下文:首先,我從一個單獨的數據庫(在不同的服務器上)獲取一些數據,在數據庫之外進行一些操作,然后以這種形式將這些數據發送到一個臨時表中:

PKID 和 WordID 構成了數據的復合鍵(單詞 ID 是在數據操作過程中派生的)——這種格式大約有 300k 行:

來自PK 字號 一些文本
1 1 一個
1 2
1 3 C
2 1 一個
2 2
2 4 D

然后,我正在運行這些查詢 - 首先直接進入第二個:

select a.FromPK, b.ToPK, count(*) as wordcount
into #temp2 
from #temp1 a 
inner join TableFoo b on a.WordID = b.WordID
group by a.FromPK, b.ToPK
select a.ID, a.Col1, a.Col2, b.pkid, c.sometext
from TableBar a inner join (
    select b.*, c.pkid from (
        select pkid, max(wordcount) as maxwordcount from 
            #temp2 group by pkid
        ) b join #temp2 c on b.pkid = c.pkid where b.wordcount = c.maxwordcount
    ) d on a.ID = d.pkid join #temp1 e on d.pkid = e.pkid

我可以在一個語句上執行這些操作(通過在第二個語句中嵌套第一個語句代替#temp2 ) - 但無論哪種情況,它都非常慢。 有什么辦法可以優化嗎?

提前致謝!

在 SQL 中優化可以是在查詢中,也可以在服務器保存數據庫的方式中。 在您的情況下,我將使用索引鍵pkid創建臨時表,因為您在該字段上使用內部聯接。 看來您可以選擇ID作為主鍵。 這樣做之后,我想你會得到更好的表現。

CREATE INDEX index_name
ON table_name (column1, column2, ...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM