所以basicly我有一個由約700million行,然後每天約200K-300K行,每月底不斷更新的表,我會消滅這更多數據比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子句中發生什麼以及將使用多少個子句,並且可能會有一些隨機分組由一個或兩個還有獨特的關鍵。所以幾乎不可能爲所有可能的組合編制索引,以確保在任何給定選擇上快速操作。
據我的理解,mysql使用的索引基於它們在模式中列出的順序,所以在我的情況下,如果在select語句中使用SN,ENDTIME和PF,則只有前2列將用於唯一鍵。有沒有什麼有效的方法,我可以像索引每列或查詢技術打破索引,以加快一點或至少在where子句中的不同組合的列上實現大致相同的性能?
非常感謝你提前〜!
看到這個問題:[我應該定義索引(A)和索引(B)還是索引(A,B),或者兩者兼有?](http://stackoverflow.com/questions/9805768/shalli-i- define-index-a-and-index-b-or-index-ab-or-both) – TMS 2012-04-17 19:05:47