当前位置:网站首页>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 表名;
聚簇索引和非聚簇索引
找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以主键就是聚簇索引.
索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需要根据索引上的值(主键),再次回表查询,非聚簇索引也叫辅助索引.
边栏推荐
- Let every developer use machine learning technology
- Flutter hybrid development: develop a simple quick start framework | developers say · dtalk
- No subject alternative DNS name matching updates. jenkins. IO found, the reason for the error and how to solve it
- 栈(线性结构)
- Little bear sect manual query and ADC in-depth study
- 来自读者们的 I/O 观后感|有奖征集获奖名单
- The Chinese word segmentation task is realized by using traditional methods (n-gram, HMM, etc.), neural network methods (CNN, LSTM, etc.) and pre training methods (Bert, etc.)
- CUDA中的异步数据拷贝
- Top 10 classic MySQL errors
- Contest3147 - game 38 of 2021 Freshmen's personal training match_ 1: Maximum palindromes
猜你喜欢

注解和反射详解以及运用

官方零基础入门 Jetpack Compose 的中文课程来啦!

深入学习JVM底层(二):HotSpot虚拟机对象

Pbootcms collection and warehousing tutorial quick collection release

AttributeError: ‘str‘ object has no attribute ‘decode‘

深入学习JVM底层(三):垃圾回收器与内存分配策略

Flutter hybrid development: develop a simple quick start framework | developers say · dtalk

队列(线性结构)

LeetCode 90. 子集 II

ROS create workspace
随机推荐
深入学习JVM底层(四):类文件结构
队列(线性结构)
日志(常用的日志框架)
Decryption skills of encrypted compressed files
VRRP之监视上行链路
CUDA中的动态全局内存分配和操作
BGP routing optimization rules and notification principles
Introduce two automatic code generators to help improve work efficiency
Pbootcms collection and warehousing tutorial quick collection release
Current situation analysis of Devops and noops
稀疏数组(非线性结构)
穀歌出海創業加速器報名倒計時 3 天,創業人闖關指南提前收藏!
社区说|Kotlin Flow 的原理与设计哲学
Little bear sect manual query and ADC in-depth study
Eco express micro engine system has supported one click deployment to cloud hosting
Frequently asked questions about jetpack compose and material you
Is there a really free applet?
10 erreurs classiques de MySQL
Codeforces Round #797 (Div. 3) A—E
程序员的自我修养—找工作反思篇