数字字典怎么用来让数据库查得快点,顺便举个例子说明下
- 问答
- 2026-01-19 17:25:12
- 4
数字字典,听起来像个复杂的工具,但其实它的核心思想非常简单,就像我们生活中常用的通讯录或字典一样,它的主要作用不是直接存储你的业务数据(比如用户的姓名、订单的详情),而是通过一种“化繁为简”的方式,把数据库中那些冗长、重复的文本字符串,转换成一串简短、高效的数字编号,数据库在处理这些数字编号时,速度会快得多,下面我详细解释一下它是怎么工作的,并给你举个具体的例子。
为什么文本字符串查询慢?
想象一下,你的数据库里有一张“用户信息表”,其中有一个“所在城市”的字段,中国有几百个城市,北京市”、“上海市”、“广州市”、“深圳市”等等,如果直接存储城市名称,会发生什么情况?
- 占用空间大:每个城市名称至少需要2到3个汉字,也就是4到6个字节,如果有一亿条用户记录,光“城市”这个字段就会占用巨大的存储空间。
- 比较效率低:当你要执行一个查询,查找所有住在深圳市的用户”,数据库需要逐条扫描记录,并把每条记录中的“城市”字段与“深圳市”这三个字进行逐个字符的比较,这种字符串的比较操作,对于计算机的CPU来说,是相对耗时和耗费计算资源的。
数字字典如何解决这个问题?
数字字典的做法是,单独创建一张小小的、专门的表,我们称之为“字典表”,这张表只有两列:一列是唯一的数字编号(比如从1开始的自增ID),另一列是对应的实际值。
继续用“城市”的例子: 我们先建立一张“城市字典表”:
| 城市ID (数字编号) | 城市名称 (实际值) |
|---|---|
| 1 | 北京市 |
| 2 | 上海市 |
| 3 | 广州市 |
| 4 | 深圳市 |
| ... | ... |
我们改造原来的“用户信息表”,不再直接存储“深圳市”这样的文本,而是只存储它在字典表里对应的数字编号,用户表会变成这样:
| 用户ID | 用户名 | 城市ID (来自字典表) |
|---|---|---|
| 1001 | 张三 | 1 |
| 1002 | 李四 | 4 |
| 1003 | 王五 | 4 |
| 1004 | 赵六 | 2 |
加速查询的具体过程
我们再来执行那个查询:“查找所有住在深圳市的用户”。
- 第一步:查字典,数据库会先到小小的“城市字典表”里,快速地找到“深圳市”对应的“城市ID”是多少,因为字典表非常小(只有几百条记录),这个查找速度极快,几乎可以忽略不计,它很快就能得到结果:城市ID = 4。
- 第二步:用数字编号查询,数据库的查询条件就从复杂的字符串匹配
城市名称 = ‘深圳市’,变成了简单的数字等值匹配城市ID = 4。
这个改变带来了巨大的性能提升:
- 比较速度快:比较两个整数(比如判断 4 是否等于 4)的速度,比比较两个字符串(判断“深圳市”是否等于“深圳市”)要快上几个数量级,CPU非常擅长处理这种整数运算。
- 索引效率高:数字字段非常适合建立索引,数据库可以为“用户信息表”的“城市ID”字段创建一个高效的B-Tree索引,当你查询
城市ID = 4时,数据库可以直接通过索引定位到所有城市ID为4的记录,就像用字典的目录查字一样,无需扫描整张庞大的用户表,这使得查询速度不会随着用户表数据的增长而明显变慢。 - 存储空间小:一个整数(如INT类型)通常只占4个字节,而一个中文字符串可能占用6个字节或更多,当数据量达到千万级甚至亿级时,这种存储空间的节省是惊人的,更小的数据量意味着更多的数据可以被缓存在内存中,而内存的读写速度远比硬盘快,这又间接提升了查询性能。
一个更实际的例子
假设一个电商网站有一个“商品分类”字段,分类名称可能是“家用电器 -> 厨房电器 -> 电饭煲”,这样的文本很长且重复率高,如果每个商品都存一遍这个长字符串,非常浪费。
使用数字字典后:
- 创建“商品分类字典表”,为每个分类路径分配一个ID。
- 商品表中只存这个分类ID。
- 当用户筛选“厨房电器”时,网站后台先查询字典表得到分类ID(比如105),然后执行
WHERE 分类ID = 105或WHERE 分类ID IN (105的子分类ID列表),这个查询会非常迅速。
需要注意的地方
数字字典也不是万能的,它最大的缺点是会增加查询的复杂性,当你需要最终结果显示的是具体的城市名称(如“深圳市”)而不是数字“4”时,你就必须让“用户信息表”和“城市字典表”进行一次连接查询(JOIN),在大多数情况下,这种连接小表的开销,远远小于直接在大表上做复杂文本筛选和排序的开销,总体性能提升是显著的。
根据数据库优化的一般经验,当某个字段的取值范围是有限的、可枚举的(比如状态码、类型、类别、地区等),并且这些值会频繁地出现在查询条件(WHERE子句)中时,就非常适合使用数字字典来优化,这是一种非常经典且高效的“以空间换时间”和“化繁为简”的数据库优化技术。
(上述解释综合了数据库优化中关于数据规范化、索引原理以及数据类型选择的基本概念,常见于如《数据库系统概念》等教材以及许多技术社区的实践分享。)
本文由钊智敏于2026-01-19发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/83791.html
