2013-02-19 41 views
1

是否有更有效的方法來查詢一個表(或表的集合)爲所有可能的幾列的組合,我目前正在運行group by,然後是max,但是這似乎並不是最有效的方式。SQL查找每個組合的示例的高效方法

SQL小提琴對於下面的例子:http://sqlfiddle.com/#!2/25f8b/3

示例表

ID | Name | Age | City | Color 
-------------------------------- 
1 | Dave | 10 | London | Red 
2 | Dave | 11 | London | Purple 
3 | Dave | 10 | Paris | Orange 
4 | Jim | 10 | London | Red 
5 | Jim | 10 | London | Green 
6 | Jim | 11 | London | Lazer 
etc... (around 500,000 rows) 

目前操作的方式:

SELECT max(ID), Name, Age, City, Color 
from People 
group by Name, Age, City 

爲了產生:

MAX(ID) NAME AGE CITY COLOR 
1  Dave 10 London Red 
3  Dave 10 Paris Orange 
2  Dave 11 London Purple 
5  Jim  10 London Red 
6  Jim  11 London Lazer 
  • 注4缺少,因爲它是5
  • 3確切的副本被包括,因爲它有一個不同的城市爲1,即使有相同的年齡/名稱

但是目前這個龐大的數據庫約需十分鐘後返回結果(注意它實際上是幾個表的連接)

是否有更有效的方法來返回相同的結果?我想象的SELECT * WHERE name = %, age = % and city = % LIMIT 1大規模收集或類似的東西

回答

0

爲了得到不同的組合有作爲保留字DISTINCT

SELECT DISTINCT Name, Age, City 
FROM People 

這給了相同的結果:

SELECT Name, Age, City 
FROM People 
GROUP BY Name, Age, City 

然而,是有限的:

  • 如果添加一列(l IKE顏色),它包含在組合分析
  • 不能使用聚合函數,如MAX
  • 我不知道這是否是更好的性能明智
+0

不幸的是我不能使用不同因爲#1的原因,我需要這些行的ID,否則這些信息對我來說並不真正有用! – 2013-02-28 10:39:02