1

グループ化されたときに複数の列を正しく順序付けるために、(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エンジンでこれと同じことを達成するクエリを見つけたいと思います。

4

1 に答える 1

1

私は最終的に、自分が求めていたものを得るためにいくつかのものを再配置できることに気づきました. 元の質問のクエリは次のように書き直すことができます。

SELECT state     AS state,
       zip       AS zip,
       COUNT(id) AS total
FROM   (SELECT state,
               zip,
               id
        FROM   (SELECT state,
                       zip,
                       id,
                       address
                FROM   DATABASE.table
                ORDER  BY id) AS a
        GROUP  BY address) AS a2
GROUP  BY zip
ORDER  BY zip  

...同じ結果セットを許可し、Brighthouse エンジンを利用しました! :-)

于 2011-07-28T21:17:06.817 に答える