超1亿条数据场景:单字段复杂LIKE与多字段等值查询孰快?
1亿条9位字符串场景下,两种查询方案的性能对比
结论:选项2的查询速度会远快于选项1,尤其是在创建合适索引的前提下。
两种方案的性能分析
选项1:LIKE模糊查询
使用SELECT * from codes WHERE code LIKE "_A__9_2__"的核心问题:
- 这种带前置通配符的模糊匹配,无法利用
code字段的普通B-tree索引,数据库只能执行全表扫描。1亿条数据的全表扫描会消耗大量IO和CPU资源,每次查询耗时极长,完全无法支撑“大量查询”的核心需求。
选项2:拆分字段的等值查询
使用SELECT * from codes WHERE char_2 = "A" AND char_5 = "9" and char_7= "2"的核心优势:
- 将9位字符串拆分为独立的单字符字段后,等值条件查询可以完美利用索引。如果创建联合索引
(char_2, char_5, char_7),数据库能通过索引直接定位到符合条件的记录,避免全表扫描,查询速度会有量级的提升。即使只给单个字段建索引,多条件组合的查询效率也远高于全表扫描。
关于索引存储开销的说明
你担心的“索引增加数据量”确实存在,但实际代价远低于性能收益:
- 单字符字段(比如
CHAR(1)类型)每条记录仅占1字节,1亿条数据单个字段的存储量仅约100MB。联合索引的大小也远小于全表数据的体积。 - 如果查询的字符位置不固定(可能涉及1-9个任意位置),无需给每个字段单独建索引,只需针对高频查询的字段组合创建联合索引即可,进一步控制存储成本。
内容的提问来源于stack exchange,提问作者realtebo
相关产品推荐
相关产品推荐

