1

rangeを使用してmysqlパーティションを使用してテーブルを作成し、数百万のデータを挿入しました。

CREATE TABLE `PART_SAMPLE ` (
  `TRANSACTION_ID` bigint(25) NOT NULL AUTO_INCREMENT,
  `TASK_ID` int(11) DEFAULT NULL,
  `STATUS_CODE` int(10) DEFAULT NULL,
  `FIELD10` int(5) DEFAULT NULL,
  KEY `TXN_ID` (`TRANSACTION_ID`),
  KEY `TASK_IDX` (`TASK_ID`),
  KEY `id_idx_task_status` (`TASK_ID`,`STATUS_CODE`),
  KEY `IDX_STATUS` (`STATUS_CODE`),
  KEY `Fld_idx` (`FIELD10`)
) ENGINE=MyISAM AUTO_INCREMENT=12249932 DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (FIELD10)
(PARTITION p0 VALUES LESS THAN (0) ENGINE = MyISAM,
 PARTITION p1 VALUES LESS THAN (1) ENGINE = MyISAM,
 PARTITION p2 VALUES LESS THAN (2) ENGINE = MyISAM,
 ........
 PARTITION p9 VALUES LESS THAN (9) ENGINE = MyISAM,
 PARTITION p10 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */

各Field10(0-10)値には、それぞれ300万のデータがあります

しかし、このように選択クエリを実行しているとき

select TASK_ID,STATUS_CODE,count(*) from PART_SAMPLE where FIELD10=X group by TASK_ID,STATUS_CODE;

xは、パーティション内の任意の値にすることができます

x値が0,2,5,8の場合、結果を取得するのに10秒しかかかりませんが、残りの場合は、結果を取得するのに50秒ほどかかります。私の控えめな言い方によると、データはすべてのフィールドで同じであるため、Field10の値についてはほぼ同じ時間がかかる必要があります。なぜこの時差が来るのか

4

0 に答える 0