开发者社区 > 云存储 > 正文

一张表 userid(不唯一)、uuid(唯一),经常要查表格存储userid的数据主键顺序选什么?

一张表有 userid(不唯一)、uuid(唯一),但经常要查表格存储userid的数据,那么,主键顺序是userid+uuid,还是uuid+userid?

展开
收起
鸡蛋灌饼儿 2023-02-06 16:18:09 402 0
4 条回答
写回答
取消 提交回答
  • 如果经常要查询表格存储中 userid 的数据,那么最佳的主键顺序是 userid+uuid

    原因:

    • 主键范围:主键范围(主键的前缀)用于确定存储数据的分区。使用 userid 作为主键范围将确保所有具有相同 userid 的数据都存储在同一个分区中。
    • 查询效率:范围查询(例如,获取特定用户的所有记录)将从 userid 主键范围开始。通过将 userid 放在主键顺序的第一位,可以提高范围查询的效率。

    示例:

    假设有一张表名为 users,其中包含以下列:

    • userid(字符串,不唯一)
    • uuid(UUID,唯一)

    如果主键顺序为 userid+uuid,则将数据存储在分区中的方式如下:

    分区 1:
        - userid: user1
            - uuid: uuid1
            - uuid2
        - userid: user2
            - uuid3
    分区 2:
        - userid: user3
            - uuid4
            - uuid5
        - userid: user4
            - uuid6
    

    要获取所有具有 useriduser1 的记录,只需执行范围查询:

    SELECT * FROM users WHERE userid = 'user1'
    

    此查询将只扫描分区 1,从而提高查询效率。

    注意事项:

    • 如果主键顺序为 uuid+userid,则范围查询将扫描所有分区,这可能会降低查询效率。
    • 确保主键中的所有列都已编制索引,以获得最佳查询性能。
    2024-02-27 18:25:40
    赞同 展开评论 打赏
  • userid+uuid,因为uuid是唯一的,可以保证查询的准确性,而userid不是唯一的,可能会查询到多条数据。

    2023-02-06 19:15:16
    赞同 展开评论 打赏
  • 建议userid+uuid 如果uuid作为分区键 可能会造成热点——该回答整理自钉群“表格存储技术交流群-2”

    2023-02-06 18:09:35
    赞同 展开评论 打赏
  • 公众号:java实用技术手册,阿里云专家博主。专注支付和交易架构技术。

    主键userid+uuid,可以命中userid。当然你也可以单独把userid设为索引。希望对您有帮助。

    2023-02-06 16:41:23
    赞同 展开评论 打赏

阿里云存储基于飞天盘古2.0分布式存储系统,产品多种多样,充分满足用户数据存储和迁移上云需求。

相关电子书

更多
TableStore在社交类场景下的应用 立即下载
表格存储实时数据流Steam的技术揭秘和应用场景 立即下载
表格存储(TableStore) 立即下载