我正在用一个非常简单的InnoDB表(名为Test)进行一些testing,结果如下:
Id int(10) unsigned NOT NULL AUTO_INCREMENT UserId int(10) NOT NULL Body varchar(512) COLLATE utf8_unicode_ci NOT NULL CreatedAt datetime NOT NULL
UserId上的一个附加索引:
KEY Idx_Test_UserId (UserId) USING BTREE
当我尝试执行此查询…
INSERT INTO Comments (UserId,Body,CreatedAt) VALUES (1,'This is a test',NOW())
…有时候我会在几毫秒内完成操作,但有些时候我需要几秒钟的时间。
我有一个简单的SELECT语句相同的问题:
SELECT Body FROM Comments WHERE UserId=1
我是唯一一个在这个特定的表上做testing的人,我真的不明白我有这样的执行时间差异。
最后一点,当我用MyISAM表进行相同的testing时,我没有任何问题。
对于InnoDB,“auto_increment”variables应该在索引(首先或单独)中以避免一些locking问题。 就我所知,MyISAM不会发生这种情况。
顺便说一句,为什么不是“身份证”的主要关键? 这并不是说它是必要的,但它只是“看起来”像它应该是这张桌子。