DBA笔记-第五部分(B+树)

---B+树索引

show create table orders;

| orders | CREATE TABLE `orders` (
  `o_orderkey` int(11) NOT NULL,
  `o_custkey` int(11) DEFAULT NULL,
  `o_orderstatus` char(1) DEFAULT NULL,
  `o_totalprice` double DEFAULT NULL,
  `o_orderDATE` date DEFAULT NULL,
  `o_orderpriority` char(15) DEFAULT NULL,
  `o_clerk` char(15) DEFAULT NULL,
  `o_shippriority` int(11) DEFAULT NULL,
  `o_comment` varchar(79) DEFAULT NULL,
  PRIMARY KEY (`o_orderkey`), -- 主键索引
  KEY `i_o_orderdate` (`o_orderDATE`), -- 索引列,key 等同于 index
  KEY `i_o_custkey` (`o_custkey`) -- 索引列,key 等同于 index
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

SELECT count(1) FROM orders;
+----------+
| count(1) |
+----------+
|  1500000 |
+----------+

SELECT * FROM orders
where o_orderkey=392353;

(root@localhost) [dbt3]> SELECT * FROM orders
    -> where o_orderkey=392353;
+------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+--------------------------------------------------------------+
| o_orderkey | o_custkey | o_orderstatus | o_totalprice | o_orderDATE | o_orderpriority | o_clerk         | o_shippriority | o_comment                                                    |
+------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+--------------------------------------------------------------+
|     392353 |     40570 | O             |    155839.52 | 1997-12-02  | 1-URGENT        | Clerk#000000874 |              0 | carefully even deposits haggle quickly according to the shea |
+------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+--------------------------------------------------------------+
1 row in set (0.00 sec)

 注意此订单表orders 有一百五十万条数据

B+树优点:

使用了 索引 KEY `i_o_custkey` (`o_custkey`) 查询仅需要0.00秒 且查询速度和数据量是没有关系的(即使数量变为一个亿),这个就是B+树的特性。

B+树缺点:

DML(Data Manipulation Language,数据操作语言)代价大,每次操作后都需要对索引字段重新排序。

文件是按照块来存储的 mysql 是按照16k来分块的文件都是按照16k的倍数来算,即使是windows上的文件也是如此,即使文件大小达不到整数倍,也会按照整数存储。

B+树原理例子:

假设你有一个电话号码的电话簿,按字母顺序排列:

电话簿示例:
A-G: 目录1
H-M: 目录2
N-Z: 目录3
当你需要查找“James”的电话时,你会:

看目录1,发现“James”不在这里。
按目录指示,跳到目录2,再找找。
如果“James”在目录2中,你会找到他的电话。如果不在,你会再跳到下一个目录。
如果有太多名字,目录1可能会分裂成两个更小的目录(A-C和D-G),并将新目录的名字提到上面的目录。

优点
快速查找:因为它总是平衡的,你总是需要相同的步数来找到电话,无论电话簿有多大(这就是为什么说数据量不影响查询速度了)。
范围查找:通过叶子节点之间的链表,你可以很快找到一个范围内的所有名字,比如“从A到F”。

 B+树就像一个多层次的有序电话簿,通过将数据分层存储和组织,让查找变得快速而高效。无论电话簿有多大,你总是能够以相同的速度找到你想要的电话号码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值