开发者社区 > 数据库 > 数据仓库 > 正文

看文档有这个例子,问一下技术问题。主键 PRIMARY KEY (login_time, cust

CREATE TABLE customer ( customer_id bigint NOT NULL COMMENT '顾客ID', customer_name varchar NOT NULL COMMENT '顾客姓名', phone_num bigint NOT NULL COMMENT '电话', city_name varchar NOT NULL COMMENT '所属城市', sex int NOT NULL COMMENT '性别', id_number varchar NOT NULL COMMENT '身份证号码', home_address varchar NOT NULL COMMENT '家庭住址', office_address varchar NOT NULL COMMENT '办公地址', age int NOT NULL COMMENT '年龄', login_time timestamp NOT NULL 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 '客户信息表';

看文档有这个例子,问一下技术问题。主键 PRIMARY KEY (login_time, customer_id, phone_num),如果通过 customer_id 会走索引吗?ADB mysql

展开
收起
真的很搞笑 2023-04-27 08:23:43 145 0
2 条回答
写回答
取消 提交回答
  • 会走索引的,adb全列都加上了单列索引,此回答整理自钉群“云数据仓库ADB-开发者群”

    2023-04-27 17:40:41
    赞同 展开评论 打赏
  • 在AnalyticDB中,存储时使用哈希分布,查询时使用基于MPP架构的并行计算引擎进行查询。对于该例子中的主键PRIMARY KEY (login_time, customer_id, phone_num),AnalyticDB会将数据按照Hash(customer_id)进行分布,相同的customer_id会被分到同一个节点中;同时,由于PRIMARY KEY包含了login_time和phone_num两个列,因此也会对这两个列进行哈希分布。

    由于哈希分布的数据存储特性,如果按照customer_id进行查询,则会在分布到的各个节点中进行查询操作。这个查询操作的性能取决于该列上的哈希分布、节点数量及数据分布情况。如果customer_id的数据较为分散,则查询的性能可能会较差。如果查询条件中同时包含大量的其他列,则需要经过全表扫描,性能会进一步降低。

    2023-04-27 10:23:56
    赞同 展开评论 打赏

阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载