グループ化されたときに複数の列を正しく順序付けるために、(myisam を介して) group_concat に依存するキークエリがいくつかある大規模なデータベースで作業しています。基本的に、各行で正しいデータを確実に取得できるようにします。各郵便番号に含まれる特定の州のレコード数を知りたいが、住所ごとに 1 つのレコードのみを知りたい場合の例:
(id は一意の符号なしの番号です)
SELECT state AS state,
zip AS zip,
COUNT(id) AS total
FROM (SELECT CAST(Substring_index(GROUP_CONCAT(id ORDER BY state, zip, city,
address,
id),
',', 1)
AS UNSIGNED) AS id,
CAST(Substring_index(GROUP_CONCAT(zip ORDER BY state, zip, city,
address
, id),
',', 1
) AS UNSIGNED) AS zip,
CAST(Substring_index(GROUP_CONCAT(state ORDER BY state, zip, city
,
address, id),
',',
1) AS CHAR) AS state
FROM DATABASE.table
GROUP BY st,
zip,
city,
address) AS a
GROUP BY zip
ORDER BY zip
myisam と、同一のデータを使用するブライトハウス データベースがあります。単純な選択を行っているだけであれば、明らかにブライトハウスには大きなパフォーマンス上の利点があるため、ブライトハウスの速度を利用できる同一の結果でクエリを実行する方法を見つけたいと考えています。
編集:自分自身を修正するために、以前に述べたinnodbではなく、Brighthouseエンジンでこれと同じことを達成するクエリを見つけたいと思います。