什么是索引?
当我们查阅书籍字典的时候,一般都会使用目录来快速定位。
通过使用索引,可以更方便快捷的获取需要的数据库信息。
分类
在mysql中,索引主要有:普通索引,唯一索引,全文索引等。
实例
下面先从一个小demo中看一下普通索引的作用:
1、新建表,表名为f1,并插入数据,见下图。
2、创建、查看和删除
1)创建
注意:其中表名为“f1”,为name列创建索引,名称为”in_name”。
第一种:
直接创建索引
create index in_name on f1(name);
修改表结构的方式(推荐使用)
alter table f1 add index in_name(name);
2)查看索引
删除索引
alter table f1 drop index in_name;
3、测试查询
方法:通过使用explain/desc来分析sql的执行。
具体语法格式:
explain select * from f1 where id=1G
或
desc select * from f1 where id=1G
先来试验一下,查询主键id
简单介绍下主要的含义:
select_type:表示select类型,simple为单表。primary为主查询等
type:表的连接类型。const只一行匹配,all全表扫描,index索引。
possible_keys:查询可能使用的索引。
key:实际使用索引
rows:扫描行数
效率
通过name列查询来比较其差别。
不使用索引
使用索引
Extra行是“Using index”,表示使用索引,名称为in_name。
对比两个图,其中差别最大的是“rows”行。因为表f1本身有7条数据,不使用索引前,查询行数为7。但使用之后,rows减为2。查询行数直接影响执行效率。
以上是普通索引的用法,简单提一下其他索引。
唯一索引的特点是索引列的值必须唯一,但允许有空值。关键字为 UNIQUE
举个例子:
create unique index in_indexname on f1(name);
缺点:
图书的目录,如果被利用的好那会很方便,但如果滥用,不仅起不到原有的作用,还会带来巨大的负担,而且还需要维护目录。
索引也是一样,它方便了查询,但降低了更新表的速度。因为mysql不仅要保存数据,还要保存索引文件。
mysql索引只对一些操作符使用:<,<=,>,>=,between,in,like(不以%开头)。