网站主题模板,美食电子商务网站建设规划书,创建个人网站多少钱,天津建设网网站打不开索引是优化数据库查询最重要的方式之一#xff0c;它是在 MySQL 的存储引擎层中实现的#xff0c;所以 每一种存储引擎对应的索引不一定相同。我们可以通过下面这张表格#xff0c;看看不同的存储引擎 分别支持哪种索引类型#xff1a; BTree 索引和 Hash 索引是我们比较… 索引是优化数据库查询最重要的方式之一它是在 MySQL 的存储引擎层中实现的所以 每一种存储引擎对应的索引不一定相同。我们可以通过下面这张表格看看不同的存储引擎 分别支持哪种索引类型 BTree 索引和 Hash 索引是我们比较常用的两个索引数据存储结构BTree 索引是通过 B 树实现的是有序排列存储所以在排序和范围查找方面都比较有优势 Hash 索引相对简单些只有 Memory 存储引擎支持 Hash 索引。Hash 索引适合 key value 键值对查询无论表数据多大查询数据的复杂度都是 O(1)且直接通过 Hash 索 引查询的性能比其它索引都要优越。 在创建表时无论使用 InnoDB 还是 MyISAM 存储引擎默认都会创建一个主键索引而 创建的主键索引默认使用的是 BTree 索引。不过虽然这两个存储引擎都支持 BTree 索 引但它们在具体的数据存储结构方面却有所不同。 InnoDB 默认创建的主键索引是聚族索引Clustered Index其它索引都属于辅助索引 Secondary Index也被称为二级索引或非聚族索引。接下来我们通过一个简单的例子说明下这两种索引在存储数据中的具体实现。 首先创建一张商品表如下 然后新增了以下几行数据如下 如果我们使用的是 MyISAM 存储引擎由于 MyISAM 使用的是辅助索引索引中每一个 叶子节点仅仅记录的是每行数据的物理地址即行指针如下图所示 如果我们使用的是 InnoDB 存储引擎由于 InnoDB 使用的是聚族索引聚族索引中的叶 子节点则记录了主键值、事务 id、用于事务和 MVVC 的回流指针以及所有的剩余列如下 图所示 基于上面的图示如果我们需要根据商品编码查询商品我们就需要将商品编码 serial_no 列作为一个索引列。此时创建的索引是一个辅助索引与 MyISAM 存储引擎的主键索引的 存储方式是一致的但叶子节点存储的就不是行指针了而是主键值并以此来作为指向行 的指针。这样的好处就是当行发生移动或者数据分裂时不用再维护索引的变更。 如果我们使用主键索引查询商品则会按照 B 树的索引找到对应的叶子节点直接获取到 行数据 select * from merchandise where id7 如果我们使用商品编码查询商品即使用辅助索引进行查询则会先检索辅助索引中的 B 树的 serial_no找到对应的叶子节点获取主键值然后再通过聚族索引中的 B 树检索 到对应的叶子节点然后获取整行数据。这个过程叫做回表。 在了解了索引的实现原理后我们再来详细了解下平时建立和使用索引时都有哪些调优方 法呢 系列阅读 电商系统的分布式事务调优数字化-落地路径与数据中台可复用架构如何实现高层次的复用