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とは市区町村が違うので含む

ただし、現在、この大規模なデータベースでは、結果を返すのに約 10 分かかります (実際にはいくつかのテーブルの結合であることに注意してください)。

同じ結果を返すより効率的な方法はありますか? 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 に答える