细说MySql索引原理

2 02 2 年,我在某个城市,面对一个项目,当时也懵,项目需求是要优化数据库检索效率,我后来才反应过来,MySQL索引这东西得好好研究。
索引啊,这东西就像是字典的目录,没有它,你可能得像翻字典一样,一页一页地翻,效率低得要命。
但是有了索引,你就可以直接跳到你要找的页码,快速找到信息。

MySQL支持的索引类型有好几种,比如普通索引、唯一索引、主键索引、组合索引和全文索引,每一种都有它的适用场景。
我创建过一个唯一索引,记得当时是给用户名字段设置的,因为用户名要唯一,不能有重复。
创建语句是:CREATE UNIQUE INDEX indexName ON tableName(username(length)); 长长的语句,但确实提高了查询效率。

说到索引的数据结构,B+树是个好东西。
为什么选择B+树呢?因为它适合磁盘IO,可以减少磁盘读取次数。
B+树的特点是,非叶子节点只存储索引,叶子节点存储全部数据,这样可以支持范围查询。
我举个例子,有一次查询id=2 9 ,它先在根节点定位到1 7 -3 5 ,然后在中间节点定位到2 6 -3 0,最后在叶子节点找到2 9 ,三次IO就搞定了。

当然,索引也有缺点,比如写入开销大,因为每次插入、更新或删除数据,都要更新索引。
存储空间也大,因为每个索引都要占用磁盘空间。
设计起来也复杂,需要根据查询模式来优化。

最后,我给了一些建议,比如优先选择高选择性列,比如用户ID、手机号这些唯一性高的字段。
组合索引的顺序也很重要,高频查询条件应该放在左侧。
避免过度索引,定期维护也是必要的。
通过这些方法,可以在查询性能和写入开销之间找到一个平衡点。
当时的项目,就是通过这些方法,实现了数据库检索效率的提升。

mysql索引一般使用什么数据结构

对,MySQL索引主要用B-Tree和B+Tree,看引擎。

MyISAM用B-Tree,简单,但维护贵。

InnoDB用B+Tree,特别是主键索引,效率高。

B+Tree比B-Tree好,数据全在叶子,查询快,I/O少。

总结,InnoDB强,B+Tree是王道。

MySQL二级索引查询过程是怎么样的

二级索引查数据,就像查电话簿。
先按名字找到页码,再翻到那页找具体人。
联合索引就像按名字和年龄双重排序的电话簿,得按名字找到,再按年龄细分。
不按顺序查,效率低。
索引用得好,查询快,回表少。