今天測試了一下 MySQL 對欄位建立索引和沒有索引的差別。我先用二個資料表分別存放二個整數和二個字串。
沒有索引的資料表:
CREATE TABLE `a_0_demo` (
`idn` int(12) unsigned NOT NULL AUTO_INCREMENT,
`int1` int(20) unsigned NOT NULL,
`int2` int(20) unsigned NOT NULL,
`c1` varchar(100) CHARACTER SET utf8 NOT NULL,
`c2` varchar(100) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`idn`)
) ENGINE=MyISAM;
有索引的資料表:
CREATE TABLE `a_1_demo` (
`idn` int(12) unsigned NOT NULL AUTO_INCREMENT,
`int1` int(20) unsigned NOT NULL,
`int2` int(20) unsigned NOT NULL,
`c1` varchar(100) CHARACTER SET utf8 NOT NULL,
`c2` varchar(100) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`idn`),
KEY `int1` (`int1`,`int2`,`c1`,`c2`)
) ENGINE=MyISAM;
然後我用亂數產生了十萬筆資料分別放到二個資料表。因為索引的關係,二個資料表大小會差很多。沒有索引的用掉了 20MB,有索引的則用掉了 49MB。
接下來要測試搜尋速度。我要他隨便搜尋一個數值:
select * from a_0_demo where 'int1' = 1000
結果沒有索引的花了 1.5 秒,有索引的才花了 0.2 秒,實在是差很多。晚點再來測試字串搜尋。