[英]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.