2012-03-26 47 views
0

我有這樣的表格佈局:如何優化MySQL的Querys

uuid bigint(20) unsigned primary auto_increment 
timestamp int(11) unsigned 
name varchar(255) 
type enum('A','B') 
subtype varchar(255) 

而且我卡上查詢,我目前用的是這個:

SELECT name, COUNT(*) as count FROM table GROUP BY name 

這個我跑後爲每個'名稱'獲取類型爲'B'的條目數量的循環,然後爲每個子類型再次獲取循環。但是這最終會導致大約500k的查詢,這太多了,必須有一個更簡單的方法來做到這一點,但我對這個數據庫的東西真的很陌生......

回答

2

您可以在GROUP BY中使用多個值。

SELECT name, type, subtype, COUNT(*) as count FROM table GROUP BY name, type, subtype 

然後結果包含數據庫中每個名稱,類型,子類型組合的一行以及相應的條目數。

+0

我希望結果集可以有更多的列而不是更多的行。 – 2012-03-26 11:34:24

+0

@Tobias,你能解釋一下你的意思嗎? – KingCronus 2012-03-26 11:51:46

+0

如果我運行這個查詢,我得到20行開始相同的名稱,我真正需要的是每個名稱只有一行,一個col類型和每個子類型一個col。 – 2012-03-26 20:33:42

0
SELECT name, type, subtype, Count(*) FROM table GROUP BY name, type, subtype 

那怎麼樣?