<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Index on Huangh&#39;s blog</title>
    <link>https://h2cone.github.io/tags/index/</link>
    <description>Recent content in Index on Huangh&#39;s blog</description>
    <generator>Hugo 0.125.0</generator>
    <language>en-us</language>
    <copyright>© Huangh&#39;s blog</copyright>
    <lastBuildDate>Tue, 15 Mar 2022 15:48:42 +0800</lastBuildDate>
    <atom:link href="https://h2cone.github.io/tags/index/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>重新认识 MySQL（一）</title>
      <link>https://h2cone.github.io/2022/03/15/mysql-index/</link>
      <pubDate>Tue, 15 Mar 2022 15:48:42 +0800</pubDate>
      <guid>https://h2cone.github.io/2022/03/15/mysql-index/</guid>
      <description>概述 MySQL 无疑是“八股文”的重灾区之一，默认存储引擎是 InnoDB 的 MySQL 实际上是什么样子？&#xA;MySQL 架构 这是 MySQL 架构图，结合应用程序开发经验，不难看出：&#xA;客户端/服务端模型。 MySQL 的守护进程是 mysqld。 MySQL 服务端向客户端提供了 SQL 接口（包括 DDL、DML、DQL、DCL）。 MySQL 可插拔存储引擎，MySQL 8.0 默认存储引擎是 InnoDB（除非创建表时指定其它引擎）。 MySQL 服务端从上到下可分为三层次：服务层（SQL、解析、优化、缓存）、存储引擎、文件。 存储引擎隐藏了数据库文件与内存缓冲池的复杂性，向服务层提供了统一的文件读写接口？ InnoDB 架构 InnoDB 至少有以下优势：&#xA;遵循 ACID 模型，事务具有提交、回滚、崩溃恢复的功能以保护用户数据。 行级锁与一致性读提高了多用户并发访问的性能。 每张 InnoDB 表都有一个聚簇索引，能够最小化主键查询的 I/O 次数。 支持外键约束来保持数据完整性。 这是 InnoDB 架构图，二分为在内存中的结构与在磁盘上的结构，&#xA;SQL 执行路径 一条普通的 SELECT 语句的旅程如下所示：&#xA;客户端输入语句。&#xA;消息通过 TCP/IP 线路。&#xA;服务端判定是否命中缓存，未命中则解析语句与生成执行计划。&#xA;服务端调用下层函数。&#xA;存储引擎读写文件。&#xA;索引篇 数据结构 索引是以额外的写入与空间为代价来加速数据查找的一类数据结构的统称。索引就像图书开头名为“目录”的书页或结尾名为“索引”的书页，读者想要查看某一内容，与其从第一页开始翻阅直到遇见目标书页为止，不如先在“索引”或“目录”查找关键词得到页码，有了页码就能快速定位关键词所在的书页。虽然隐喻便于理解索引的加速作用，但说服力有限，至少定性描述解决查找问题的数据结构与算法性能：&#xA;上图是著名的红皮书对所讲述的数据结构与算法时间复杂度的总结，顺序查找最慢，二叉树查找最坏的情况下退化成顺序查询，而有序数组的插入操作很慢，对于查找与插入较好的权衡是 2-3 树查找（红黑树）。散列表或哈希表表现如何？取决于哈希函数的实现，一般情况下，Hash Table 时间复杂度是 O(1)，几乎与 N 无关。&#xA;数据库系统（DBMS）不仅管理内存缓冲池（Buffer Pool），而且管理数据库文件（Database File）。由于计算机系统主存（Memory）与磁盘（Disk）的速度高度不对等，开发者选择数据结构不仅考虑发生在内存的查找与插入，而且高度注意磁盘 I/O 次数或页（Page）访问次数。</description>
    </item>
  </channel>
</rss>
