我有一个myisam表(在mariadb上),里面有700万行。
CREATE TABLE `mytable` (
`id` bigint(100) unsigned NOT NULL AUTO_INCREMENT,
`x` int(5) unsigned NOT NULL DEFAULT '0',
`y` int(5) unsigned NOT NULL DEFAULT '0',
`value` int(5) unsigned NOT NULL DEFAULT '0'
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10152508 DEFAULT CHARSET=utf8 PAGE_CHECKSUM=1
当我这么做的时候
SELECT * FROM mytable WHERE id = 167880;
大约需要0.272秒
当我这么做的时候
UPDATE mytable SET value = 1 WHERE id = 167880;
从0.200到2.5秒随机进行
我想这是因为我的表有很多行,但是,用主键更新一行应该不会花太多时间。
因为我在发布之前做了一些研究,下面是我已经做过的检查:
无重复索引
除了主键“id”之外没有其他索引
无触发器
尝试切换到innodb引擎,情况更糟(大约6秒更新)
尝试切换到aria引擎,情况更糟
已经做了优化表;
config是mariadb最新版本(新安装)的默认配置
做了所有这些检查,而数据库没有被其他任何东西使用,所以在测试期间没有沉重的读数
1条答案
按热度按时间gudnpqoy1#
我认为问题是id列使用的数据类型。使用int而不是bigint可以显著减少磁盘空间。请阅读本文。http://ronaldbradford.com/blog/bigint-v-int-is-there-a-big-deal-2008-07-18/ 希望有帮助