MySQL双列表反向查询优化:为userUUID建索引是否足够?
优化UUID到userID的反向查询性能
针对你的场景,给userUUID列创建唯一索引就完全足够解决反向查询的性能问题,具体分析和操作如下:
为什么当前反向查询慢?
没有索引的情况下,SELECT userID FROM userIDmap WHERE userUUID='xxx'会触发全表扫描,几百万行数据的话,扫描耗时会非常长。而主键userID是InnoDB默认的聚簇索引,正向查询能直接定位数据,所以速度快。为什么创建索引可行?
因为userUUID是全局唯一值,给它创建唯一索引后,MySQL可以通过索引直接定位到对应的单行数据,查询性能和基于主键的正向查询几乎一致。而且InnoDB的二级索引叶子节点会存储主键值,你的查询只需要返回userID,属于覆盖索引查询,连回表操作都不需要,效率拉满。具体操作语句
执行这条SQL创建唯一索引:CREATE UNIQUE INDEX idx_userUUID ON userIDmap (userUUID);如果业务层已经严格保证
userUUID不会重复,也可以创建普通索引,但唯一索引更严谨,能避免脏数据插入,查询性能和普通索引没有差别。关于索引的存储顾虑
虽然UUID是字符串类型,索引体积会比整数主键大,但几百万行的规模下,这个索引的存储空间完全在MySQL的处理能力范围内,不会带来额外的性能负担。
内容的提问来源于stack exchange,提问作者musava_ribica
相关产品推荐
相关产品推荐

