MySQL索引

1.提升查询效率

 

 类似字典,比如:年龄为20的都在第几页,把20和页码都存放在索引中

下一次查询时,不从第一页,一条一条的查询,而是根据索引信息快速的查询出数据。

索引本身也要耗费存储空间的,跟字典中的拼音查询、部首查询占字典的页数一样。

2.其他的增删改,效率降低

索引还会浪费增删改效率,除了查询效率高了以外,其他的增删改效率都低了。(数据页的数据改动也需要改动索引页相对应的数据

3.MySQL索引类型

3.1 普通索引

 基本索引类型;允许在定义索引的列中插入重复值和空值。

3.2 唯一索引

索引列数据不重复;允许空值。

在创建unique唯一约束的时候,数据库会自动创建。

3.3 主键索引

主键列中的每个值是非空、唯一的;一个主键将自动创建主键索引。

创建primary key 主键的时候,数据库会自动创建。

3.4 复合索引

将多个列组合作为索引。

例:如果经常名字和年龄查询数据时,就可以建复合索引。(同时创建在多列上)

3.5 全文索引(全库)

支持值的全文查找;允许重复值和空值。

InnoDB不支持全文索引,(如果一个数据页的一个修改,就会修改索引页信息)

Myisam支持全文索引

3.6 空间索引(全磁盘空间)

对空间数据类型的列建立的索引。

4.索引(语法)

4.1 创建索引

//默认是普通索引
//唯一索引、全文索引、空间索引。可选
create [unique|fulltext|spatial] index index_name
on table_name (column_name[length]...);

 

示例:在student表的studentName列创建普通索引

#创建索引
create index i_studentname
on student(studentname);

#查所有数据时不使用索引
select * from student;

#使用,当索引项做条件时使用了索引
select * from student where studentname='郑秀妍';#使用索引i_studentname

#按照其他条件来查时,不使用索引
select * from student where password='123456';

 

 

4.2 删除索引

drop index index_name on table_name;
删除表时,该表的所有索引同时被删除
#删除索引
drop index i_studentname on student;

 

5.创建索引的原则

5.1 按照下列标准选择建立索引的列

频繁搜索的列:比如条件后边的studentname

经常用作查询选择的列:比如select 后边跟的字段,经常要查名字studentname,年龄age

经常排序、分组的列:经常放到order by 后边、group by 后边的列

经常用作连接的列(主键/外键)

5.2 请不要使用下面的列创建索引

仅包含几个不同值的列:比如性别列,只有男女取值,没必要建索引。

表中仅包含几行:表中数据量(记录)很少,直接查数据页就很快。

6.经验

查询时减少使用 * 返回全部列,不要返回不需要的列。(使用 * 时,就不使用索引了,查询效率低)

where子句中有多个条件表达式时,包含索引列的表达式应置于其他表达式之前。(有索引的列,可以先排序一部分数据,也是提高查询效率)

避免在order by 子句中使用表达式。(order by后边尽量使用单纯的列)

 7.查看某个表已有的索引

#查看所有已经创建的索引(表名)
show index from student;

 

posted @ 2020-11-12 21:42  微微亮  阅读(97)  评论(0编辑  收藏  举报