AnalyticDB MySQL-表和索引与MySQL的差异

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: AnalyticDB MySQL在语法上兼容MySQL,但是它的技术架构不同于MySQL,表和索引也和MySQL差异较大,这篇文章列出了这些差异,在使用AnalyticDB MySQL创建表时可以参考一下。

     AnalyticDB MySQL版是阿里云的海量数据实时高并发在线分析数据仓库,语法完全兼容MySQL,在使用AnalyticDB MySQL时表面上就和使用MySQL一样,建表时也可以使用MySQL的建表语句。但是,这个只是表面现象, AnalyticDB MySQL在技术架构上和MySQL完全不同,在表和索引的使用上也和MySQL差异较大,如果忽视这些差异,将它当作MySQL来使用,可能会较大为问题。

1 AnalyticDB MySQL中的表

      AnalyticDB MySQL版支持复制表和普通表两种类型。复制表也可以称为广播表,会在集群的每个节点存储一份数据,对应与数据仓库中的维度表,因此复制表的数据量不宜太大,阿里的建议每张复制表存储的数据不超过2万行。

      AnalyticDB MySQL的普通表和MySQL数据库的普通表的概念不同,在AnalyticDB MySQL里,普通表实际上是分片表,AnalyticDB MySQL的建表语法同MySQL兼容,如果使用MySQL的建表语法创建了一张表,在表有主键的情况下,AnalyticDB MySQL会以主键作为分片键,如果没有主键,如果MySQL表不含有主键,AnalyticDB MySQL版将添加一个__adb_auto_id__字段作为主键和分布键。

      假设用户用下面的MySQL的建表语句在AnalyticDB MySQL建了一张表

CREATETABLE t (c1 bigint, c2 int, c3 varchar, PRIMARY KEY(c1,c2));    Query OK,0 rows affected (2.37 sec)

      在AnalyticDB MySQL中查看表的定义是下面这个样子

SHOW CREATETABLE t;+-------+-------------------------------------------------------------------------------------------------------------------------------+|Table|CreateTable|+-------+-------------------------------------------------------------------------------------------------------------------------------+| t     |CreateTable `t` (     `c1` bigint,     `c2` int,     `c3` varchar,     primary key (c1,c2)) DISTRIBUTED BY HASH(`c1`,`c2`) INDEX_ALL='Y'|+-------+-------------------------------------------------------------------------------------------------------------------------------+1 row inset(0.04 sec)

     从上面的建表语句可以看到,在AnalyticDB MySQL中,分片(使用分布键)是必须的,强制的,除非使用复制表,分区则是用户自由定制的。AnalyticDB MySQL中,分布

采用的是哈希算法,每张表只支持一个分布键,这个是显而易见的,因为AnalyticDB MySQL使用分布键在集群内的节点上分布数据,在实际分布数据时,只能选择一种分布方式,多个分布键毫无意义。在选择分布键时,不建议选择日期、时间和时间戳类型,而应该选择交易ID、设备ID、用户ID(具有业务特征的),如果此类的键,可以选择自增键。这样选择的目的是将可能利用AnalyticDB MySQL的节点进行分布是计算,举一个简单的例子,我们要查询一批用户的一段时间内数据,首先想到的是查询是以每个用户为单位来区分的,我们希望把每个用户的查询分布到不同的节点上,而不是希望每个时间段的数据的查询分布到不同的节点上。在分布键的选择上,还要注意优先选择查询频率高的、join的键作为分布键。

     另一个值得注意的地方是,在AnalyticDB MySQL中,表的分片数是自动决定的,用户不可以手动设置一个表的分片数,一个表的具体分片数是由数据库的版本和集群的配置决定的,配置越高,表的分片树越多。

     在分布的基础上,可以再对表进行分区,当一个分片的数据库太大影响查询性能时,就需要对分片进行分区。这里的分区类似mysql数据库中范围分区,最常见的是时间作为分区键。

      分区的另外的好处是可以利用AnalyticDB MySQL的LIFECYCLE N特定以及冷热特性,超过生命周期的分区会被自动删除,也可以设置冷热分区的比例。二级分区的数据应该维持静态,数据不应在二级分区之间内移动,如果二级分区频繁更新,可能是分区键选择的不合理。

     表的主键,主键可以作为每一条记录的唯一标识。在创建表时,通过PRIMARY KEY来定义主键,在AnalyticDB MySQL中,只用定义了主键表才支持数据更新操作,包括更新和删除。

     主键可以是单个字段或多个字段的组合,同时主键必须包含分布键和分区键,考虑到性能,分布键和分区键尽可能放到主键的前部。

     在表上也可以创建聚集索引,每个表仅仅支持创建一个聚集索引。

     下面用一个官网上的例子说明一下,

CREATETABLE customer (        customer_id bigintNOTNULL COMMENT '顾客ID',        customer_name varcharNOTNULL COMMENT '顾客姓名',        phone_num bigintNOTNULL COMMENT '电话',        city_name varcharNOTNULL COMMENT '所属城市',        sex intNOTNULL COMMENT '性别',        id_number varcharNOTNULL COMMENT '身份证号码',        home_address varcharNOTNULL COMMENT '家庭住址',        office_address varcharNOTNULL COMMENT '办公地址',        age intNOTNULL COMMENT '年龄',        login_time timestampNOTNULL COMMENT '登录时间',        PRIMARY KEY (login_time, customer_id, phone_num))        DISTRIBUTED BY HASH(customer_id)        PARTITION BY VALUE(DATE_FORMAT(login_time,'%Y%m%d')) LIFECYCLE 30        COMMENT '客户信息表';

     表customer采用customer_id作为分布键,以login_time作为分区键,主键必须包含分区键和分布键,这里选择login_time, customer_id, phone_num,分布键和分区键尽可能放到主键的前部和分布键放在主键靠前的部分,分区以天为单位,同时设置了LIFECYCLE特性,超过30天的分区会被自动删除。

2 自适应索引

      AnalyticDB MySQL的玄武存储引擎采用了自适应列级自动索引技术,针对字符串、数字、文本、JSON、向量等列类型都会自动创建索引,在数据库中创建一张表后用show indexes from <表名>查询,

      可以看到每个列上都有一个索引,这些索引是AnalyticDB MySQL自动创建的,AnalyticDB MySQL可以做到列级索引任意维度组合检索、多路渐进流式归并,大幅提升了数据过滤性


相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
3月前
|
监控 关系型数据库 MySQL
DTS实时同步进阶:MySQL到AnalyticDB毫秒级ETL管道搭建
本方案采用“Binlog解析-数据清洗-批量写入”三级流水线架构,实现MySQL到AnalyticDB的高效同步。通过状态机解析、内存格式转换与向量化写入技术,保障毫秒级延迟(P99&lt;300ms)、50万+ TPS吞吐及99.99%数据一致性,支持高并发、低延迟的数据实时处理场景。
106 10
|
SQL NoSQL 关系型数据库
实时数仓Hologres发展问题之实时数仓的类数据库化与HTAP数据库的差异如何解决
实时数仓Hologres发展问题之实时数仓的类数据库化与HTAP数据库的差异如何解决
140 2
|
7月前
|
SQL 关系型数据库 OLAP
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
171 2
|
10月前
|
存储 关系型数据库 MySQL
MySQL 字段类型深度解析:VARCHAR(50) 与 VARCHAR(500) 的差异
在MySQL数据库中,`VARCHAR`类型是一种非常灵活的字符串存储类型,它允许存储可变长度的字符串。然而,`VARCHAR(50)`和`VARCHAR(500)`之间的差异不仅仅是长度的不同,它们在存储效率、性能和使用场景上也有所不同。本文将深入探讨这两种字段类型的区别及其对数据库设计的影响。
339 2
|
10月前
|
数据管理 大数据 OLAP
AnalyticDB核心概念详解:表、索引与分区
【10月更文挑战第25天】在大数据时代,高效的数据库管理和分析工具变得尤为重要。阿里云的AnalyticDB(ADB)是一款完全托管的实时数据仓库服务,能够支持PB级数据的实时查询和分析。作为一名数据工程师,我有幸在多个项目中使用过AnalyticDB,并积累了丰富的实践经验。本文将从我个人的角度出发,详细介绍AnalyticDB的核心概念,包括表结构设计、索引类型选择和分区策略,帮助读者更有效地组织和管理数据。
452 3
|
SQL 关系型数据库 MySQL
实时数仓 Hologres操作报错合集之Flink CTAS Source(Mysql) 表字段从可空改为非空的原因是什么
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之使用CTAS同步MySQL到Hologres时出现的时区差异,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 关系型数据库 专有云
实时数仓 Hologres产品使用合集之如何针对模糊匹配查询设置索引
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
存储 SQL 人工智能
AnalyticDB for MySQL:AI时代实时数据分析的最佳选择
阿里云云原生数据仓库AnalyticDB MySQL(ADB-M)与被OpenAI收购的实时分析数据库Rockset对比,两者在架构设计上有诸多相似点,例如存算分离、实时写入等,但ADB-M在多个方面展现出了更为成熟和先进的特性。ADB-M支持更丰富的弹性能力、强一致实时数据读写、全面的索引类型、高吞吐写入、完备的DML和Online DDL操作、智能的数据生命周期管理。在向量检索与分析上,ADB-M提供更高检索精度。ADB-M设计原理包括分布式表、基于Raft协议的同步层、支持DML和DDL的引擎层、高性能低成本的持久化层,这些共同确保了ADB-M在AI时代作为实时数据仓库的高性能与高性价比
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
1354 0

推荐镜像

更多