当前位置:网站首页>MySql索引
MySql索引
2022-07-02 06:16:00 【fnfd】
索引是帮助MySQL效获取数据的数据结构.
排好序的快速查找的数据结构
数据库在存储数据本身之外,还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引.
索引原理
索引的目的在于提高查询效率,本质通过不断的缩小想要获取数据的范围拉力筛选出最终想要的结果,同时把随机的事件变成顺序的事件,有了这种机制,我们可以总是用同一种查找方法来锁定数据.借助索引,执行查询时不必扫描整个表就能够快速地找到所需要的数据.
索引优势
提高数据检索的效率,降低数据库的IO成本.
通过索引列对数据进行排序,降低数据排序的成本,降低了CPU消耗.
索引劣势
索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用磁盘空间.
虽然索引大大提高了查询速度,同时却会降低更新表的速度,例如对表进行INSERT,UPDATE和DELETE,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件,每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息.
什么情况下使用索引
主键 默认建立唯一索引
作为查询条件的列(where后)
作为外键的列,外键关系建立索引
排序的字段
分组的字段
什么情况下不需要使用索引
表记录太少
频繁增删改的表,查询较少的表,给需要的类增加索引
where条件中使用不到的列
数据重复且平均的列(如性别)
索引数据结构
B+树(InnoDB存储引擎就是用B+树实现索引).
排好序的一个结点可以存储多个数据结构
非叶子结点不存储数据,值存储索引,可以放更多的索引.
数据记录都存放在叶子结点中
所有叶子结点之间都有一个链指针.
B+树通过对数据进行排序可以
索引分类
主键索引:设定为主键后数据库会自动建立索引.
ALTER TABLE 表名 add PRIMARY KEY 表名(列名);
删除主键索引:
ALTER TABLE 表名 drop PRIMARY KEY;
单值索引:即一个索引只包含单个列,一个表可以有多个单列索引.
创建单值索引:CREATE INDEX 索引名 ON 表名(列名);
DROP INDEX 索引名;
唯一索引:索引列的值必须唯一,允许为null
CREATE UNIQUE INDEX 索引名 ON 表名(列名);
DROP INDEX 索引名 ON 表名;
组合索引(复合索引):即一个索引包含多个列,在数据库操作期间,复合索引比单值索引所需要的开销更小(对于相同的多个列建立索引),当表的行数远大于索引列的数目时可以使用复合索引.
创建复合索引:CREATE INDEX 索引名 ON 表名(列1,列2)
DROP INDEX 列名 ON 表名;
组合索引最左前缀原则
例如表中有a,b,c三列,为a,b两列创建组合索引,那么在使用时需要满足最左侧索引原则.在使用组合索引的列作为条件时,必须要出现最左侧列为条件,否则组合索引不生效.
全文索引
需要模糊查询时,一般索引无效,这时候就可以使用全文索引了.
CREATE FULLTEXT INDEX索引名 ON 表名(字段名)WITH PARSER ngram;
Select 结构 from 表名 where match(列名) AGAINST(搜索词).
查看索引
SHOW INDEX FROM 表名;
聚簇索引和非聚簇索引
找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以主键就是聚簇索引.
索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需要根据索引上的值(主键),再次回表查询,非聚簇索引也叫辅助索引.
边栏推荐
- Support new and old imperial CMS collection and warehousing tutorials
- 【张三学C语言之】—深入理解数据存储
- Data playback partner rviz+plotjuggler
- Decryption skills of encrypted compressed files
- LeetCode 27. Removing Elements
- 深入了解JUC并发(一)什么是JUC
- Sudo right raising
- Talking about MySQL database
- Zhuanzhuanben - LAN construction - Notes
- 深入了解JUC并发(二)并发理论
猜你喜欢
AttributeError: ‘str‘ object has no attribute ‘decode‘
Data science [9]: SVD (2)
WLAN相关知识点总结
Deep learning classification network -- Network in network
Contest3147 - game 38 of 2021 Freshmen's personal training match_ A: chicken
TensorRT的数据格式定义详解
深入学习JVM底层(三):垃圾回收器与内存分配策略
深入了解JUC并发(一)什么是JUC
亚马逊aws数据湖工作之坑1
锐捷EBGP 配置案例
随机推荐
It is said that Kwai will pay for the Tiktok super fast version of the video? How can you miss this opportunity to collect wool?
ROS create workspace
Linear DP (split)
Database learning summary 5
Zhuanzhuanben - LAN construction - Notes
深入学习JVM底层(二):HotSpot虚拟机对象
LeetCode 90. 子集 II
Reading classic literature -- Suma++
Use of Arduino wire Library
Contest3147 - game 38 of 2021 Freshmen's personal training match_ F: Polyhedral dice
TensorRT中的循环
MySQL的10大经典错误
Codeforces Round #797 (Div. 3) A—E
Step by step | help you easily submit Google play data security form
链表(线性结构)
队列(线性结构)
Network related knowledge (Hardware Engineer)
LeetCode 47. 全排列 II
栈(线性结构)
LeetCode 27. Removing Elements