0

+100 万行のデータベースがあり、構造は次のようになります。

CREATE TABLE IF NOT EXISTS `Performance` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `CIDs` varchar(100) DEFAULT NULL,
  `COLOR` varchar(100) DEFAULT NULL,
  `Name` varchar(255) DEFAULT NULL,
  `XT` bigint(16) DEFAULT NULL,
  `MP` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `CIDs` (`CIDs`),
  KEY `COLOR` (`COLOR`),
  KEY `Name` (`Name`),
  KEY `XT` (`XT`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

INSERT into `Performance` (`id`, `CIDs`, `COLOR`, `Name`, `XT`, `MP`) 
VALUES
(1, '1253374160', 'test test test test test', 'Load1', '89421331221', ''),
(2, '1271672029', NULL, 'Load1', '19421331221', NULL),
(3, '1188959688', NULL, 'Load2', '39421331221', NULL),
(4, '1271672029', NULL, 'Load3', '49421341221', 'Description'),
(5, '1271888888', NULL, 'Load4', '59421331221', 'Description');

出力は次のようになります。

+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+
| id | CIDs       | COLOR                    | XT          | MP          | Name  | PIDs      | unqName |
+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+
|  1 | 1253374160 | test test test test test | 89421331221 |             | Load1 | 1,2       | Load1   |
|  3 | 1188959688 | NULL                     | 39421331221 | NULL        | Load2 | 3         | Load2   |
|  4 | 1271672029 | NULL                     | 49421341221 | Description | Load3 | 4,5       | Load3   |
+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+

どうすればこれをできるだけ早く行うことができますか? 私はいくつかのグループで試しましたが、数分かかります:/

//編集: group by を使用したソリューションでは、4 つのサブクエリが必要でした:/

//edit2: リクエストに応じて:

    SELECT id, 
       cids, 
       color, 
       xt, 
       mp, 
       name, 
       Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs, 
       Ifnull(name, id)                             AS unqName 
FROM   (SELECT id, 
               cids, 
               color, 
               xt, 
               mp, 
               name, 
               Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs, 
               Ifnull(mp, id)                               AS unqMP 
        FROM   (SELECT id, 
                       cids, 
                       color, 
                       xt, 
                       mp, 
                       name, 
                       Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs, 
                       Ifnull(xt, id)                               AS unqXT 
                FROM   (SELECT id, 
                               cids, 
                               color, 
                               xt, 
                               mp, 
                               name, 
                               Group_concat(DISTINCT id) AS PIDs, 
                               Ifnull(color, id)         AS unqCOLOR 
                        FROM   performance 
                        GROUP  BY unqcolor) m 
                GROUP  BY unqxt) x 
        GROUP  BY unqmp) y 
GROUP  BY unqname
4

0 に答える 0