Brighthouse group_concat альтернатива? - PullRequest
1 голос
/ 20 июля 2011

Я работаю с большой базой данных, где у нас есть несколько ключевых запросов, которые полагаются на group_concat (через myisam), чтобы правильно упорядочить несколько столбцов при группировании.По сути, так что мы должны получать правильные данные в каждой строке.Пример, если я хотел узнать, сколько у меня записей в определенном состоянии, которые находятся в каждом почтовом индексе, но только одна запись на адрес:

(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 и brighthouse с идентичными данными для игры.Если я просто делаю простые выборки, то, очевидно, brighthouse обладает ОГРОМНЫМ преимуществом в производительности, поэтому я надеюсь найти способ выполнить запрос с идентичными результатами, который может воспользоваться скоростью brighthouse.

Редактировать: Комупоправьте себя, я хотел бы найти запрос, который выполняет то же самое с помощью движка Brighthouse, а не innodb, как я уже говорил ранее.

1 Ответ

1 голос
/ 29 июля 2011

В конце концов я понял, что могу изменить некоторые вещи, чтобы получить то, что я хотел.Запрос в моем исходном вопросе может быть переписан как:

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!: -)

...