基本的に、私は約7億行で構成されるテーブルを持っており、1日あたり約20万から30万行で絶えず更新されており、毎月月末に3か月以上前のデータを消去します。
CREATE TABLE TESTRECORD (
TIMEADDED timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
SERIAL varchar(8) NOT NULL,
ENDTIME varchar(14) NOT NULL,
MODEL varchar(2) NOT NULL,
PROCESS int(4) NOT NULL,
PF varchar(4) NOT NULL,
COMID varchar(6) NOT NULL,
COMTP varchar(3) NOT NULL,
TRIAL varchar(4) NOT NULL,
TEST varchar(8) NOT NULL,
SECTION int(2) NOT NULL,
DATA_0 float NOT NULL,
DATA_1 float NOT NULL,
DATA_2 float NOT NULL,
DATA_3 float NOT NULL,
DATA_4 float NOT NULL,
DATA_5 float NOT NULL,
PRIMARY KEY (SN,ENDTIME,SECTION),
UNIQUE KEY BASESN (SN,ENDTIME,MODEL,PROCESS,PF,COMID,TRIAL,TEST,SECTION),
KEY COMID (COMID),
KEY TRIAL (TRIAL),
KEY PF (PF),
KEY TEST (TEST)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
一意キーは、selectステートメントで使用されるパラメーターを定義しました。このテーブルの基本的な機能は動的データ分析であるため、where句で何が発生し、それらがいくつ使用されるかについての特定の順序はなく、1つまたは2つの列によるランダムなグループ化が存在する可能性があります。一意のキーからも。したがって、すべての可能なコンボにインデックスを付けて、特定の選択での高速操作を保証することはほとんど不可能です。
私の理解では、mysqlはスキーマにリストされている順序に基づいてインデックスを使用するため、私の場合、selectステートメントでSN、ENDTIME、およびPFを使用すると、一意のキーから最初の2列のみが使用されます。列ごとに1つのインデックスのようにインデックスを分割したり、クエリ手法を使用して処理を少し高速化したり、少なくともwhere句のさまざまな列の組み合わせでほぼ同等のパフォーマンスを実現したりする効率的な方法はありますか?
よろしくお願いします〜!!!