何百万もの行を含む MYISAM MySQL DB テーブルを使用するように依頼されましたが、最初にクエリを高速化する必要があります。
以前はインデックス作成はまったくありませんでした。「タイプ」列に新しいインデックスを追加しましたが、これは役に立ちましたが、インデックスを作成するのに最適な列が他にあるかどうか知りたいですか?
ここに私のCREATE TABLEがあります:
CREATE TABLE `clicks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`companyid` int(11) DEFAULT '0',
`type` varchar(32) NOT NULL DEFAULT '',
`contextid` int(11) NOT NULL DEFAULT '0',
`period` varchar(16) NOT NULL DEFAULT '',
`timestamp` int(11) NOT NULL DEFAULT '0',
`location` varchar(32) NOT NULL DEFAULT '',
`ip` varchar(32) DEFAULT NULL,
`useragent` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `companyid` (`companyid`,`type`,`period`),
KEY `type` (`type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
典型的な SELECT ステートメントは、一般にcompanyid
,type
およびcontextid
列でフィルタリングします。
例えば:
SELECT period, count(period) as count FROM clicks WHERE contextid in (123) AND timestamp > 123123123 GROUP BY period ORDER BY timestamp ASC
また
SELECT period, count(period) as count FROM clicks WHERE contextid in (123) AND type IN('direct') AND timestamp > 123123123 GROUP BY period ORDER BY timestamp ASC
私の質問の最後の部分は次のとおりです。インデックスを追加したとき、type
約 1 時間かかりました。複数のインデックスを追加または削除する場合、1 つのクエリで実行できますか、それとも 1 つずつ実行して待つ必要がありますかそれぞれが終了するには?
ご意見ありがとうございます。