0
我被困解決這個問題,它應該是不錯的聽覺新新鮮的想法:)SQL - 避免額外GROUP BY(和提高查詢性能)
我有一個表的記錄數十億這樣
TAB_IX (int) (PK)
TAB_ID (int) (PK)
PR_ID (int) (PK)
SP_ID (int) (PK)(IX)
....
這樣
SELECT TAB_ID, COUNT (SP_ID) as HITS FROM table t
INNER JOIN table_sp s on t.SP_ID = s.ID
WHERE TAB_IX = @tab_inx
AND PR_ID IN (SELECT PR_ID FROM @pr_id)
AND s.NAME IN (SELECT DISTINCT NAME FROM @sp_names)
GROUP BY TAB_ID
table_sp以前我是檢索數據與記錄10K(ID(INT)(PK),NAME(VARCHAR)(IX))略表
@pr_id和@sp_names是具有一列的表變量
查詢非常快(約2-3秒);現在我不希望像
TAB_IX - TAB_ID - PR_ID - SP_ID
1 - 700 - 1 - 100
1 - 700 - 2 - 100
應被視爲一個區分記錄不同PR_ID和同TAB_IX,TAB_ID,SP_ID
因此,例如記錄。
的唯一方法似乎在做一個額外的GROUP BY
像這樣
SELECT TAB_ID, COUNT(SP_ID) as HITS FROM (
SELECT TAB_ID, SP_ID, COUNT (PR_ID) FROM table
WHERE TAB_IX = @tab_inx
AND PR_ID in (select PR_ID from @pr_id)
AND s.NAME IN (SELECT DISTINCT NAME FROM @sp_names)
GROUP BY TAB_ID, SP_ID) AS DUMMY
GROUP BY TAB_ID
問題是性能,因爲添加這種額外的GROUP BY操作看起來非常痛苦。
您對改進查詢有什麼想法嗎?
感謝提前:)
謝謝YBO原來的查詢,我din't想想這個解決方案: )但是表現仍然非常相似;這個DISTINCT在很多記錄上也很重。我擔心我無法提高查詢的速度...... – JoinZ 2013-02-20 10:52:12