目录
一、为什么要用索引
索引就好比是一本书的目录,能快速定位数据。为了提高查询效率,减少查询时间
二、什么时候才用索引
2.经常出现在where的后面,以条件的形式存在,也就是说这个字段总是被扫描;
3.该字段很少DML(insert delete update)操作(因为DML之后,索引需要重新排序。索引越多,增删改越慢);
注意:建议不要随意添加索引。索引也是需要维护的,太多的话反而会降低系统的性能。
三、创建删除索引
1)创建索引
创建唯一索引:create unique index 索引名 ON 表名(字段);
创建普通索引:
create index 索引名 on 表名(字段); //索引创建在字段上
alter table 表名 add index 索引名(字段); //修改表时添加
创建组合索引:create index 索引名 on 表名(字段1,字段2);
2)删除索引
四、索引分类
1)按数据结构分类
1.B+树索引
二叉树:完全二叉树 、满二叉树 、二叉搜索树(又叫二叉排序树、二叉查找树) 、平衡二叉树 ( 又叫AVL树)、红黑树、堆、哈夫曼树(又叫最优二叉树)、线索二叉树
多叉树:B树(又叫多路平衡查找(搜索)树)、B+树、B*树)
2.Hash索引
mysql的Memory存储引擎,默认是 Hash索引。
3.全文索引(倒排索引)
使用like '%xxx%'进行模糊查询时,字段的索引就会失效。因此,在数据量大的情况下,通过此种方式查询的效率极低。这个时候,就可通过全文索引(Full-Text Search)来进行优化。
全文索引主要对字符串类型建立基于分词的索引,只有char、varchar,text 列上可以创建全文索引,以便能够更加快速地查询数据量较大的字符串类型的字段。
注意,MySQL 5.6之前,只有MyISAM支持全文索引。MySQL 5.6后MyISAM、InnoDB都支持。
使用语法可以参考:mysql全文索引_明豆的博客-CSDN博客_mysql全文索引
4.R树空间索引
对空间数据类型的字段建立的索引。空间索引只能在存储引擎为myisam的表中创建,mysql中的空间数据类型有4种,分别是geometry、point、linestring、polygon。创建空间索引的列,必须将其声明为not null