千家信息网

MySQL:一个特殊的问题

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,---这是开发问的一个问题---###一、问题描述如果一个表有一个联合索引 (a,b):索引记录如下:id1 id21 101 101 102 202 203 303 30意思就是说通过a进行过滤的数
千家信息网最后更新 2026年11月01日MySQL:一个特殊的问题

---

这是开发问的一个问题

---

###一、问题描述

如果一个表有一个联合索引 (a,b):

索引记录如下:

id1 id2

1 10

1 10

1 10

2 20

2 20

3 30

3 30

意思就是说通过a进行过滤的数据和通过a和b过滤的数据条数一样,如果要通过索引访问数据select * from table where id1=1 和 select * from table where id1=1 and id2=10 是不是效率一致?

###二、简易分析

首先对于数据查找,首先第一步是进行innodb层数据的定位(也就是从什么位置开始输出数据给MySQL层),然后定位完成后,顺序向下访问就行了,因为innodb 的表示一个索引组织表。

- 对于等值条件,Innodb层会多访问下一条数据,如果不符合要求了则表示结束了,会返回一个DB_RECORD_NOT_FOUND标记给MySQL层表示结束。

- 对于 范围 比如 > and < 操作如果使用了索引,那么<操作要么在MySQL层进行判断结束,要买使用ICP在Innodb做一层过滤。

对于数据定位后的顺序访问而言,没有什么差别。

因此这个问题主要的问题转换为, a=* 和 a=* and b=* 在进行数据定位的时候效率是否一致,对于这个问题来讲因为a=* 和 a=* and b=* 返回的数据是一样。所谓数据定位找到数据返回的起点在什么地方,这个过程一般会通过B+数定位到叶子节点,然后根据在叶子节点内部使用二分法进行比较,加速定位,比较的方法就是根据字段个数逐个比较(函数cmp_dtuple_rec_with_match_bytes),比如a=* 那么需要比较就是一个,如果a=* and b=* 那么比较的字段就是2个。

代码大概的栈

```

->row_search_mvcc

->btr_pcur_open_with_no_init_func

-> btr_cur_search_to_nth_level

-> page_cur_search_with_match_bytes

-> cmp_dtuple_rec_with_match_bytes

```

cmp_dtuple_rec_with_match_bytes 这部分注释如下:

```

/* Match fields in a loop; stop if we run out of fields in dtuple

or find an externally stored field */

while (cur_field < n_cmp) {

```

n_cmp就是需要比较的个数。

debug 记录:

```

a=*记录

829 ut_ad(n_cmp <= dtuple_get_n_fields(dtuple));

(gdb) n

830 ut_ad(cur_field <= n_cmp);

(gdb) p n_cmp

$4 = 1

a=* and b=* 记录

829 ut_ad(n_cmp <= dtuple_get_n_fields(dtuple));

(gdb) n

830 ut_ad(cur_field <= n_cmp);

(gdb) p n_cmp

$5 = 2

```

因此结论:如果这种特殊情况下,我认为效率应该基本一致,仅仅区别就在于定位比较的时候使用字段的多少,但这不会是语句的最大性能耗用点,最大的应该是循环访问所有的字段和通过主键回表。因此尽量写自己需要的字段。

深入理解MySQL主从原理:https://www.jianshu.com/nb/43148932

个人微信:gaopp_22389860

数据 定位 问题 字段 就是 索引 一致 效率 最大 个数 叶子 时候 节点 顺序 特殊 这不 个人 主从 也就是 二分法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 南京欣网互联网络科技有限公司 互联网科技工作委员会 互联网科技深圳 老年人脱离互联网科技的作文 开启互联网科技时代小说 科技互联网的估值 中国互联网有什么科技含量 字节跳动和互联网科技 团飞科技与伯堂互联网服务平台 顶级互联网科技成果有哪些 搜狐科技互联网 互联网科技创新的路径 深圳互联网科技的发展 互联网科技快讯热点 2021世界互联网领先科技成果发布 互联网科技职业技能培训学校 科技互联网经济论坛 科技互联网公司两年变化 广州全民伙伴互联网科技有限公司 科技与互联网 互联网 科技创业 奇士达互联网科技 西安互联网科技公司 米聚互联网科技南京有限公司排面 国大互联网教育科技有限公司工作 城市宝互联网科技有限公司 上海同邻互联网科技有限公司规模 好易买互联网科技 山东亿川互联网科技有限责任公司
0