我是MySQL的新手,我對InnoDB的性能有些懷疑。我有一個表,我想儲存一些措施,我在存儲過程中使用一個循環測試密集插入:MySQL InnoDB插入性能(Windows)
CREATE TABLE `measures` (
`Id` int(10) unsigned NOT NULL,
`DT` datetime NOT NULL,
`TF1` float DEFAULT '0',
`IF1` float DEFAULT '0',
`PAF1` float DEFAULT '0',
`PRF1` float DEFAULT '0',
`CF1` float DEFAULT '0',
`TF2` float DEFAULT '0',
`IF2` float DEFAULT '0',
`PAF2` float DEFAULT '0',
`PRF2` float DEFAULT '0',
`CF2` float DEFAULT '0',
`TF3` float DEFAULT '0',
`IF3` float DEFAULT '0',
`PAF3` float DEFAULT '0',
`PRF3` float DEFAULT '0',
`CF3` float DEFAULT '0',
`CTotal` float DEFAULT '0',
PRIMARY KEY (`Id`,`DT`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE PROCEDURE `sp_INSERT_TEST`()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i<=6000) DO
INSERT INTO measures
(Id, DT, TF1, IF1, PAF1, PRF1, CF1, TF2, IF2, PAF2, PRF2, CF2,
TF3, IF3, PAF3, PRF3, CF3, CTotal)
VALUES
(1, TIMESTAMPADD(MINUTE,i, NOW()),
0.1, 1, 10, 100, 1000,
0.2, 2, 20, 200, 2000,
0.3, 3, 30, 300, 3000,
i * 10);
SET i=i+1;
END WHILE;
END
執行的總時間大約是150秒,但如果我使用MyISAM
代替InnoDB
,時間約爲0.2秒。
這兩個引擎之間的性能差異是否正常?是否有可能使用InnoDB來改進插入以接近MyISAM性能或者它是一個引擎限制?
注:我使用的MySQL 56年5月1日(64位),Windows 7的64位,與開發商機默認配置(我也試過服務器的配置,但性能接近)。
在此先感謝。 約翰
使用擴展插入語句讓MySQL的做多插入事務中,即使自動提交已關閉。所以,是的,這是一個好主意。 – MarkR 2011-05-06 18:13:59
我不同意你的第一個陳述「Innodb表現相當差」。沒有支持其競爭通用工作的功能集的開源引擎,所以我認爲你可能是錯的。 – MarkR 2011-05-06 18:14:50
@MarkR我不是故意打擊InnoDB,也許我可以將它改爲「比MyISAM慢得多」。至於替代什麼PostgreSQL呢? – stivlo 2011-05-06 18:21:10