私はいつも成長している巨大なmysqlテーブルを持っています。チャットデータを記録しています。ユーザ名のクエリがそうでなければ5秒のように取ることができますので、私のテーブルには、ユーザー名をインデックス作成巨大なmysqlテーブルの最適化
CREATE TABLE `log` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`channel` VARCHAR(26) NOT NULL,
`timestamp` DATETIME NOT NULL,
`username` VARCHAR(25) NOT NULL,
`message` TEXT NOT NULL,
PRIMARY KEY (`id`),
INDEX `username` (`username`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=2582573
;
どのように見えるか
これはちょっと重要です。
このテーブルをさらに最適化して、膨大な量のデータを作成する準備ができましたか? 100m行も問題にならないようにします。
このような場合は、リレーションDB以外のソリューションを検討することをおすすめします。 – Jacco
ちょうど.txtファイル以外にどのような選択肢がありますか? – gempir
このテーブルの最適なインデックスは実際に実行している実際のクエリによって異なります。たとえば、クエリで "ORDER BY t.timestamp DESC"や "WHERE t.timestamp> = NOW() - INTERVAL 4 DAY"などを指定すると、\ timestamp \のインデックスが有効になる場合があります。クエリでユーザー名に等価述語が含まれている場合は、シングルトンの「ユーザー名」列の索引の代わりに複合索引を「ONログ(ユーザー名、\ 'タイムスタンプ\')」にすることをお薦めします。また、* partitioning *は、巨大なテーブルの管理に役立つことがあります。 – spencer7593