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;

相关推荐
kaico20183 分钟前
MYSQL的日志文件
数据库·mysql
oMcLin8 分钟前
如何在AlmaLinux 9上优化MariaDB Galera Cluster,提升数据库集群的事务一致性与并发处理能力?
数据库·mariadb
yuankunliu9 分钟前
【redis】1、Redis的安装部署
数据库·redis·缓存
model200511 分钟前
mariadb系统盘迁移数据盘
数据库·mariadb
码农学院36 分钟前
使用腾讯翻译文本
服务器·数据库·c#
@zulnger1 小时前
正则表达式
数据库·正则表达式
源代码•宸1 小时前
Golang基础语法(go语言error、go语言defer、go语言异常捕获、依赖管理、Go Modules命令)
开发语言·数据库·后端·算法·golang·defer·recover
optimistic_chen1 小时前
【Redis 系列】持久化特性
linux·数据库·redis·分布式·中间件·持久化
Coder码匠1 小时前
从项目实践中学习 Spring 事务范围优化
数据库·spring