56,679
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE `tbl_idcard_myisam` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT NULL,
`id_card` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
KEY `index_tbl_idcard_myisam` (`id_card`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
for (int i = 0; i < num; i++)
{
testIdcardInnodbService.queryByIdcard(IdCardCreate.generate());
}
num=100000 , myisamSpendTime = 85790毫秒 -- 单独查询myisam
num=100000 , innodbSpendTime = 72805毫秒 -- 单独查询innodb
num=1000000 , myisamSpendTime = 844717毫秒 -- 单独查询myisam
num=1000000 , innodbSpendTime = 673824毫秒 -- 单独查询innodb
num=10000 , myisamSpendTime = 4835毫秒
num=10000 , innodbSpendTime = 36497毫秒
num=10000 , myisamSpendTime = 2471毫秒
num=10000 , innodbSpendTime = 8876毫秒
num=10000 , myisamSpendTime = 2449毫秒
num=10000 , innodbSpendTime = 2936毫秒
num=10000 , innodbSpendTime = 2037毫秒
num=10000 , myisamSpendTime = 2420毫秒
num=10000 , innodbSpendTime = 1987毫秒
num=10000 , myisamSpendTime = 2410毫秒
num=100000 , myisamSpendTime = 23773毫秒
num=100000 , innodbSpendTime = 18708毫秒
问题:刚开始myisam快得多,为什么越到后面,Innodb越来越快,并且超过了myisam?[/quote]
我觉得这个差别,可能是缓存机制的差别,innodb的缓存机制更加有效,随着查询次数越来越多,可能innodb的缓存命中率更高,因为内存总是有限的,用有限的内存来提高效率。
num=10000 , myisamSpendTime = 4835毫秒
num=10000 , innodbSpendTime = 36497毫秒
num=10000 , myisamSpendTime = 2471毫秒
num=10000 , innodbSpendTime = 8876毫秒
num=10000 , myisamSpendTime = 2449毫秒
num=10000 , innodbSpendTime = 2936毫秒
num=10000 , innodbSpendTime = 2037毫秒
num=10000 , myisamSpendTime = 2420毫秒
num=10000 , innodbSpendTime = 1987毫秒
num=10000 , myisamSpendTime = 2410毫秒
num=100000 , myisamSpendTime = 23773毫秒
num=100000 , innodbSpendTime = 18708毫秒
问题:刚开始myisam快得多,为什么越到后面,Innodb越来越快,并且超过了myisam?