Mysql的索引

索引:从本质上来说索引就是一个数据结构,索引也是磁盘文件。使用索引需要进行磁盘IO操作。当索引文件过多时,数据的改变会导致索引的更改,而索引也涉及了磁盘的IO操作。当表中的数据增加到几十万或者几百万时,查询数据将会很慢,所以引入了一个索引。目的是提高查询的效率。

索引的类型:单列索引 多列索引

unique 和 primary key自动会创建索引

在InnoDB中,主键索引(即聚簇索引)和辅助索引(即非聚簇索引)的数据存储方式是不同的:

  1. 聚簇索引(Clustered Index):

    • InnoDB会根据主键创建聚簇索引,数据行的物理存储顺序与主键值的顺序相同。
    • 数据行的实际数据存储在B+树的叶子节点上,因此查询主键时可以直接从叶子节点读取到完整的行数据。
    • 聚簇索引的叶子节点不仅包含了索引键(主键值),还包含了与该键相关联的所有行数据。
  2. 辅助索引(Secondary Index):

    • 辅助索引的叶子节点只包含索引键值和对应的主键值。为了找到完整的行数据,需要先通过辅助索引找到主键,然后再通过聚簇索引查找相应的行数据。

总结来说,InnoDB引擎下的数据确实是存储在索引树节点上的,具体的存储方式取决于数据是通过聚簇索引还是辅助索引进行访问的。

  • 索引结构:索引通常采用B树或B+树结构,这种平衡树结构能够保持数据按序存储,使得在树中的查找、插入、删除操作的时间复杂度为O(log n)。这意味着即使在大型数据集上,查找特定数据的速度也能保持在一个较低的水平。
  • 快速定位:通过索引,数据库可以快速定位到需要的行,而不需要遍历整个表。尤其是在查询条件中使用了索引字段,数据库可以直接跳转到相应的索引节点,避免不必要的扫描

当没有索引时,进行全表扫描,而有索引时只需要进行索引扫描速度会更快一些。const是主键或者唯一键,而ref是扫描索引。通过explain去观看索引使用的情况。

当给name列加上索引时:经常作为where过滤条件时要加上索引,字符串列创建索引时尽量控制索引的长度不能过程。索引字段涉及类型强转或者函数将不会使用索引。

删除索引:drop index nameindex on student;

相关推荐
oradh17 小时前
Oracle闪回技术操作总结
数据库·oracle·oracle闪回技术操作总结·oracle闪回·flashback技术
ltl18 小时前
RocksDB 并发 Compaction 与 Rate Limiter
数据库
闻道且行之19 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
夏炳辉.20 小时前
PostgreSQL 高可用集群核心配置参数全解:从原生流复制到 Patroni 企业级方案
数据库·postgresql
努力的小雨21 小时前
KES 开启 SSL 前,证书、端口和客户端要一起验
数据库
DevOps老兵21 小时前
AI全栈知识07:向量数据库 - Milvus/Chroma实战
数据库·ai·milvus
这个DBA有点耶21 小时前
当数据库从“存储”走向“决策”:金仓数据库的融合架构之路
数据库·架构·aigc
smilejingwei1 天前
Trae+SQLazy 实践 SQL 国产化移植:Oracle => 达梦
数据库·sql·oracle
意疏1 天前
2026年远控软件安全横评:六款主流工具逐项核查——官方文档、一手实测与安全事件,全摊开
大数据·前端·数据库
名不经传的养虾人1 天前
从0到1:企业级AI项目迭代日记 Vol.90|Agent变快了,Judge定下来了
大数据·数据库·人工智能·ai编程·企业ai