2013-01-08 33 views
0

我需要創建一個新表,其中包含源表中度量值的彙總值。 源表非常龐大。使用索引來提高選擇查詢中聚合函數的速度

例如。源表

Category | Product | Sales 
A  | P1  | 100 
B  | P2  | 200 
C  | P3  | 300 

查詢是這樣的:

SELECT Category, 
     Product, 
     SUM(Sales) 
FROM source_table 
GROUP BY Category. 

沒有WHERE條件。

索引是否有助於加速進程?
加快查詢的任何備用機制?

+1

。你需要在你的查詢中運行'EXPLAIN'來查看減速是什麼......只是在查詢後面跟着'EXPLAIN'。 – Cfreak

+0

我們解釋說明的輸出。運行在MySQL以下命令和輸出發佈到這樣的問題:EXPLAIN SELECT類別, 產品, SUM(銷售) FROM source_table GROUP BY – Namphibian

+0

類別explain語句的輸出是: ID | \t select_type | \t表| | \t類型| \t possible_keys | \t key | \t key_len | \t ref | \t行| \t Extra | 1 | \t SIMPLE | \t new_isis_indirect | \t index | \t NULL | \t idx_new_indirect | \t 1915 | \t NULL | \t 182753 | \t \t \t ' – user1957246

回答

0

它可能有助於在類別上添加索引,因爲它在GROUP BY子句中。但是你正在做一個全錶轉儲,所以它可能會很慢。

一個更好的策略可能是爲銷售報告創建一個新表並根據您的業務需求填充它。如果它只能每天更新,則安排存儲過程每晚運行以重新填充它。如果需要反映表的當前狀態,那麼可以使用觸發器在基表更新時更新報表。或者,您可以在應用程序級別運行單獨的查詢,以在基表更新時更新報表。

0

索引是一個棘手的工具。如果您打算在表中添加索引,您至少應該考慮:

1-在本專欄中有多少個不同的值。 2-記錄總數與不同數值的比例如何。 3-我多久可以應用此列的何處,分組順序或排序條款。

正如@Kasey答案所說的,對於看到的內容,您可以在類別列中添加一個索引,但它將取決於您對該列具有的不同值的數量。也許是