1

是否有一种更有效的方法来查询表(或表的集合)以查找几列的所有可能组合,我目前正在运行 group by 然后 max,但这似乎不是最有效的方式。

以下示例的 SQL Fiddle: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或类似的东西

4

1 回答 1

0

要获得不同的组合,请使用保留字DISTINCT

SELECT DISTINCT Name, Age, City
FROM People

这给出了相同的结果:

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

但是它是有限的:

  • 如果您添加一列(如颜色),它将包含在组合分析中
  • 您不能使用聚合函数,例如 MAX
  • 我不知道它是否有更好的性能明智
于 2013-02-19T15:46:50.207 回答