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;

相关推荐
我在北京coding15 分钟前
300道GaussDB(WMS)题目及答案。
数据库·gaussdb
小Tomkk27 分钟前
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
数据库·mysql·阿里云
明月醉窗台1 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
沉到海底去吧Go2 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
老纪的技术唠嗑局2 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
未来之窗软件服务3 小时前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库
一只爱撸猫的程序猿4 小时前
构建一个简单的智能文档问答系统实例
数据库·spring boot·aigc
nanzhuhe4 小时前
sql中group by使用场景
数据库·sql·数据挖掘
消失在人海中4 小时前
oracle sql 语句 优化方法
数据库·sql·oracle
Clang's Blog4 小时前
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)
数据库·mysql·php·wordpr