0
に取っている: 1)シンプルカウントidが65.5万行を持つテーブルに私が持っている長い
CREATE TABLE RawData1 (
cdasite varchar(45) COLLATE utf8_unicode_ci NOT NULL,
id int(20) NOT NULL DEFAULT '0',
timedate datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
type int(11) NOT NULL DEFAULT '0',
status int(11) NOT NULL DEFAULT '0',
branch_id int(20) DEFAULT NULL,
branch_idString varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (id,cdasite,timedate),
KEY idx_timedate (timedate,cdasite)
) ENGINE=InnoDB;
2)パーティションを持つ 同じテーブル(RawData2それを呼び出す)
PARTITION BY RANGE (TO_DAYS(timedate))
(PARTITION p20140101 VALUES LESS THAN (735599) ENGINE = InnoDB,
PARTITION p20140401 VALUES LESS THAN (735689) ENGINE = InnoDB,
.
.
PARTITION p20201001 VALUES LESS THAN (738064) ENGINE = InnoDB,
PARTITION future VALUES LESS THAN MAXVALUE ENGINE = InnoDB);
SELECT count(id) FROM RawData1
where timedate BETWEEN DATE_FORMAT(date_sub(now(),INTERVAL 2 YEAR),'%Y-%m-01') AND now();
2問題:
私は、同じクエリを使用していますなぜパーティション化されたテーブルが通常のテーブルより長く実行されるのですか? 2.正規表は17.094秒で36380217を返します。それは正常です、すべてのR & Dリーダーはそれが十分に速くはないと思う、それは〜2秒で戻る必要があります。
何を確認/変更/変更する必要がありますか? 35732495の行をスキャンし、36380217を3から4秒未満で検索するのは現実的ですか?
@ num8er - 'DATETIME'と' TIMESTAMP'はほぼ同じです。 'BTREE'はMySQLのインデックスのデフォルトです。終わりと終わりの間?それほど違いはありません。 _私はMyISAM_を主張していません。それは遠ざかっている。 65Mの行と複数秒のクエリでは、MyISAMのテーブルロックのため競合することがあります。 'CHAR'はこのケースを含めて' VARCHAR'よりも決して良くはありません。 'CHAR'はより大きいデータにつながり、より多くのI/Oにつながります。これは遅くなります。 –
@ num8er - 私は約7つの主張を作成しました。それぞれの主張は合理的に確信しています。私は長い間チェックしていないものもあります。遅い/遅くないクエリを観察することによって間接的に頻繁にチェックするものがあります。議論したいのはどれですか?あなたは新しい質問を始めることを提案します。私たちはそこで議論し、他の人たちの体重測定を促すことができます。 –