mysql-索引

2023-05-06  本文已影响0人  ssttIsme

索引Index是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:数据机构。

索引的目的在于提高查找效率,可类比字典。(可以理解为排好序快速查找数据结构)

索引会影响where后面的查找速度和order by后面的排序速度

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些结构以某种方式引用(指针的方式指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。


为了加快Col2的查找,可以维护一个二叉树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二分查找一定的算法复杂度内获取到相应的数据,从而快速的检索出符合条件的记录。

一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以文件的形式存储在磁盘上

我们平时所说的索引,如果没有特殊说明,都是值B树(多路搜索树,并不一定是二叉的)结构索引。其中聚集索引,次要索引,覆盖索引,复合索引,唯一索引默认使用B+树索引。当然除了B+树这种类型的索引外,还有哈希索引(hash index)等。当然除了B+树这种类型的索引之外,还有哈希索引(hash index)等。

优势

劣势

mysql索引分类(一张表索引建议不要超过5个)

单值索引:即一个索引只包含单个列,一个表可以有多个单列索引
唯一索引:索引列的值必须唯一,但允许有空值
复合索引:即一个索引包含多个列

基本语法
创建

CREATE [UNIQUE] INDEX indexName ON mytable(columname(length));
ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columname(length));

删除

DROP INDEX [indexName] ON mytable;

查看

SHOW INDEX FROM table_name\G

使用ALTER命令

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

添加一个主键,意味着索引必须是唯一的,且不能为NULL

ALTER TABLE table_name ADD UNIQUE  index_name(column_list)

创建的索引必须是唯一的(除了NULL外,NULL可能出现多次)

ALTER TABLE table_name ADD INDEX index_name(column_list)

添加普通索引,索引值可能出现多次

ALTER TABLE table_name ADD FULLTEXT index_name(column_list)

指定索引为FULLTEXT,用于全文索引

mysql索引结构

BTree索引
Hash索引
full-text全文索引
R-Tree索引

哪些情况创建索引

1主键自动建立唯一索引
2频繁作为查询条件的字段应该创建索引
3查询中与其他表管理的字段,外键建立索引
4高并发下倾向创建组合索引
5查询中排序的字段(按所建立的索引按序排序才会提高排序顺序)
6查询中统计或分组的字段

哪些情况不需要创建索引

1表记录太少(300万记录以上建立建索引)
2频繁更新的字段不适合创建索引(mysql不仅要保存数据还要保存索引文件)
3where条件里用不到的字段
4某个数据列包含许多重复的内容/数据重复且分布平均的表字段(如性别)

上一篇下一篇

猜你喜欢

热点阅读