您现在的位置是:首页 >学无止境 >C 和 C++,MYSQL笔试题网站首页学无止境

C 和 C++,MYSQL笔试题

hunandede 2025-07-12 00:01:03
简介C 和 C++,MYSQL笔试题

1.mysql 数据索引相关:为什么InnoDB存储引擎选择使用B+tree 索引机构?

2. mysql 数据索引类型相关--- 以下 SQL 语句,那个执行效率高?为什么?

对于 select * from user where id = 10;

查询聚集索引一次就可以找到

对于 select * from user where name = 'Arm';

第一步,我们要通过二级索引 查找 id

通过二级索引查找到id后,在通过聚集索引找到 row,row就是保存的具体的一行数据

要查找两次索引。

结论 因此第一个执行效率高

 3. mysql 数据索引 -- InnoDB 主键索引的B+ tree 高度为多高呢?

要看懂这个 思考题,需要结合前面的 innoDB 的逻辑存储结构一起看

第一个要弄清楚的问题:节点 是放在页中的。

一个节点是存储在 页中的,而 innoDB 一个页的大小为 16K,

        换算成字节就是 一个页的大小为 16 * 1024 个字节

那么如果不是叶子节点,一个页能存储多少 键值 指针 呢?

        对于主键索引,键值 就是我们 的主键的数据类型,int 占用4字节,bigint占用8字节,

        innoDB中指针占用 6个字节。

        因此对于 非叶子结点,可以存储的 键值 指针 大小为:

                n * 8 + (n+1)*6 = 16 * 1024; n为键值,n+1 为指针,n计算出来为1170.

                即 可以存放的 键值 有1170个,指针为1171个。

如果高度为2,那么 1171 个指针,就会指向 1171个页,而这些页中存放着 叶子结点。

        那么1个页 存放多少个叶子结点呢?这里只有假设了,一个页还是 16k,我们假设一行数据大小为1k,那么16k的大小就能放 16 行数据。因此得出 :

        1171个页 * 16 行/页 = 18736 行 数据

如果高度是3, 

        1171 * 1171个页 * 16 行/页 = 21939856行 数据

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。