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
在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的数据较为分散,则查询的性能可能会较差。如果查询条件中同时包含大量的其他列,则需要经过全表扫描,性能会进一步降低。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。