2

私は1つのサーバーにこのテーブルを持っています:

CREATE TABLE `mh` (
  `M` char(13) NOT NULL DEFAULT '',
  `F` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `D` char(6) DEFAULT NULL,
  `A` int(11) DEFAULT NULL,
  `DC` char(13) DEFAULT NULL,
  `S` char(22) DEFAULT NULL,
  `S0` int(11) DEFAULT NULL,
  PRIMARY KEY (`F`,`M`),
  KEY `IDX_S` (`S`),
  KEY `IDX_M` (`M`),
  KEY `IDX_A` (`M`,`A`)
) ENGINE=TokuDB DEFAULT CHARSET=latin1;

同じテーブルですが、別の同様のサーバーで MyISAM エンジンを使用しています。

このクエリを実行すると:

CREATE TEMPORARY TABLE temp
(S VARCHAR(22) PRIMARY KEY)
AS
(
    SELECT S, COUNT(S) AS HowManyS
    FROM mh
    WHERE A = 1 AND S IS NOT NULL
    GROUP BY S
);

テーブルには 1 億 2000 万行あります。TokuDB を使用するサーバーは 3 時間でクエリを実行し、MyISAM を使用するサーバーは 22 分で実行します。

TokuDB を使用したクエリでは、「約 38230000 行をクエリ済み、約 303929 行をフェッチ済み、まだデータを読み込んでいます」というステータスが表示されます。

なぜ TokuDB クエリの所要時間は非常に長いのですか? TokuDB は本当に優れたエンジンですが、このクエリで何が間違っているのかわかりません

サーバーはMariaDB 5.5.38サーバーを使用しています

4

1 に答える 1