索引介绍
索引是什什么
官⽅方介绍索引是帮助MySQL⾼高效获取数据的数据结构。更更通俗的说,数据库索引好⽐比是⼀一本书前
⾯面的⽬目录,能加快数据库的查询速度。
⽅方便便查找—检索
索引查询内容—覆盖索引
排序
⼀一般来说索引本身也很⼤大,不不可能全部存储在内存中,因此索引往往是存储在磁盘上的⽂文件中的
(可能存储在单独的索引⽂文件中,也可能和数据⼀一起存储在数据⽂文件中)。
我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯⼀一索引等,没有特别说
明,默认都是使⽤用B+树结构组织(多路路搜索树,并不不⼀一定是⼆二叉的)的索引。
索引的优势和劣势
优势:
可以提⾼高数据检索的效率,降低数据库的IO成本,类似于书的⽬目录。 — 检索
通过索引列列对数据进⾏行行排序,降低数据排序的成本,降低了了CPU的消耗。 —排序
被索引的列列会⾃自动进⾏行行排序,包括【单列列索引】和【组合索引】,只是组合索引的排序要复
杂⼀一些。
如果按照索引列列的顺序进⾏行行排序,对应order by语句句来说,效率就会提⾼高很多。
where 索引列列 在存储引擎层 处理理
覆盖索引,不不需要回表查询
劣势:
索引会占据磁盘空间
索引虽然会提⾼高查询效率,但是会降低更更新表的效率。⽐比如每次对表进⾏行行增删改操作, MySQL不不
仅要保存数据,还有保存或者更更新对应的索引⽂文件。
索引的分类
单列列索引
普通索引: MySQL中基本索引类型,没有什什么限制,允许在定义索引的列列中插⼊入重复值和空值,
纯粹为了了查询数据更更快⼀一点。 add index
唯⼀一索引:索引列列中的值必须是唯⼀一的,但是允许为空值. add unique index
主键索引:是⼀一种特殊的唯⼀一索引,不不允许有空值。 pk
组合索引
在表中的多个字段组合上创建的索引 add index(col1,col2..)
组合索引的使⽤用,需要遵循最左前缀原则(最左匹配原则,后⾯面⾼高级篇讲解) 。
⼀一般情况下, 建议使⽤用组合索引代替单列列索引(主键索引除外,具体原因后⾯面知识点讲解)。
全⽂文索引
只有在MyISAM引擎、 InnoDB(5.6以后)上才能使⽤用,⽽而且只能在CHAR,VARCHAR,TEXT类型字段上
使⽤用全⽂文索引。 fulltext
优先级最⾼高 先执⾏行行 不不会执⾏行行其他索引
存储引擎 决定执⾏行行⼀一个索引
空间索引
不不做介绍,⼀一般使⽤用不不到。
索引的使⽤用
创建索引
单列列索引之普通索引
单列列索引之唯⼀一索引
单列列索引之全⽂文索引
组合索引
删除索引
查看索引
索引原理理分析
索引的存储结构
索引存储结构
索引是在存储引擎中实现的,也就是说不不同的存储引擎,会使⽤用不不同的索引
MyISAM和InnoDB存储引擎:只⽀支持B+ TREE索引, 也就是说默认使⽤用BTREE,不不能够更更换
MEMORY/HEAP存储引擎:⽀支持HASH和BTREE索引
B树和B+树
数据结构示例例⽹网站:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
B树图示
CREATE INDEX index_name ON table(column(length)) ;
ALTER TABLE table_name ADD INDEX index_name (column(length)) ;
CREATE UNIQUE INDEX index_name ON table(column(length)) ;
alter table table_name add unique index index_name(column);
CREATE FULLTEXT INDEX index_name ON table(column(length)) ;
alter table table_name add fulltext index_name(column)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。


