在大表上按主键查询更新太慢

hec6srdp  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(456)

我有一个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最新版本(新安装)的默认配置
做了所有这些检查,而数据库没有被其他任何东西使用,所以在测试期间没有沉重的读数

gudnpqoy

gudnpqoy1#

我认为问题是id列使用的数据类型。使用int而不是bigint可以显著减少磁盘空间。请阅读本文。http://ronaldbradford.com/blog/bigint-v-int-is-there-a-big-deal-2008-07-18/ 希望有帮助

相关问题