首页 > 解决方案 > MariaDb ColumnStore 服务器中使用主键的删除/更新速度非常慢

问题描述

我们有带有 InnoDB 引擎的表(在 MariaDB 列存储服务器上),它有 500 万行和 2 列的主键。DDL:

CREATE TABLE `interest` (
  `src_id` TINYINT NOT NULL,
  `id` binary(36) NOT NULL,
  `account_id` bigint(20) NOT NULL,
  `instrument_id` int(11) NOT NULL,
  `quantity` decimal(15,4) NOT NULL,
  `time` datetime NOT NULL,
  `interest` decimal(16,2) NOT NULL,
  `auto_incr` bigint(20) NOT NULL ,
  PRIMARY KEY (`src_id`, `id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

并且这两个查询都需要 4-5 秒来执行

DELETE FROM interest WHERE `id`='52f35ddb-94d0-4744-bb3c-f3ae8100dc8e' AND `src_id`='1';

UPDATE interest SET interest = 1 WHERE `id`='52f35ddb-94d0-4744-bb3c-f3ae8100dc8e' AND `src_id`='1';

解释的结果是:

EXPLAIN EXTENDED DELETE FROM interest WHERE `id`='52f35ddb-94d0-4744-bb3c-f3ae8100dc8e' AND `src_id`='1';

在此处输入图像描述

看起来主键没有生效,因为它扫描了超过 50% 的行。

我从这个表(在 MariaDB 列存储服务器中)导出数据并将其导入到普通 MariaDB 服务器中的表中,没有这样的问题。两个查询都在 10 毫秒内执行。

我们正在使用最新版本的 MariaDB 列存储:1.2.5

标签: sqldatabasemariadb

解决方案


列存储使用稍微定制的 MDB 版本,并且存在自定义代码更改优化器设置的地方,但这仅适用于具有 CS 表的查询。JFYI Enterprise 10.4 和 community 10.5 将 Columnstore 作为非自定义 MDB 版本的普通引擎。


推荐阅读