码迷,mamicode.com
首页 > 数据库 > 详细

mysql优化之索引

时间:2017-09-11 18:05:15      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:prim   避免   函数   fulltext   文本   没有   语法   需要   table   

Mysql优化之使用索引

1,索引简介

索引是单独一种数据结构,单独存在的一个空间。可以把数据表里的建立了索引的字段,进和物理地址,存在在一块,这块空间就是‘索引’。

查询数据先从索引中查询,查询到之后,可以直接定位到物理地址,通过物理地址,直接找到真实数据。查询会更快速。

索引是一种 以空间换时间的一种方式,牺牲了空间和写的速度,提高了查询速度

2,准备演示数据表

这里以myisam引擎的数据库为例,我准备了一张1800000条数据的表,这张表存储时包含了三个文件,.Frm是表结构文件,.MYD是表数据文件,.MYI是表索引文件,Mac下使用管理员模式将这三个文件复制到mysql相应目录下

提示:Mac使用su命令切换到root模式

技术分享

技术分享

退出root模式

 技术分享

查看数据库student里是否有这个表

 技术分享

 

查看一下结果,这里没有加主键,因为主键默认具有索引

 技术分享

 

3,添加使用索引

先看下不加索引时的查询速度

 技术分享

把empno设为主键

 技术分享

再看一下查询速度

技术分享

会发现查询速度有很大提升

那么非主键索引怎么加呢,例如来查一下ename= jKYMOL的记录

 技术分享

 查询耗时0.37秒,下面给ename添加索引

 技术分享

再来查询

 技术分享

现在来总结一下添加索引的语法

主键索引:alter table 表名 add primary key (主键字段)

唯一索引:alter table 表名 add unique key (唯一键字段)

普通索引:alter table 表名 add key (普通字段)

全文索引:alter table 表名 add fulltext key (文本类型字段,mysql5.6以下myisam支持)

符合索引:alter table 表名 add 索引类型 [索引名称]  (字段)

5,索引可以添加那么就可删除,怎么删除呢

带自增属性主键索引删除,需要先删除自增属性

删除(修改)自增属性语法:alter table 表名 modify 字段 字段属性

删除主键索引语法:alter table 表名 drop primary key

删除非主键索引语法:alter table 表名 drop 索引名

例如删除索引ename

 技术分享

现在再来查一下数据

 技术分享

可以看到查询时间又变长了

补充:查看某条查询语句是否会用到索引

语法:explain sql语句\G

说明:后面的\G是格式化输出

例如:

 技术分享

6,索引原则

很多时候,增加了索引,但是没有被使用到。这种情况,其实索引是没有起到作用的。要避免出现这种情况。

  列独立,即sql语句的字段不允许有运算操作,包含函数方法

技术分享

 技术分享

左固定,使用模糊查询只有左边固定时才能用到索引

   先给ename字段添加索引alter table emp add key (ename);

技术分享

 

使用show create table emp;命令查看添加结果

 技术分享

 使用模糊查询,查询ename字段

技术分享

发现只有左固定时查询速度才会很快

复合索引,多个字段组合成为索引,字段同时出现,可以使用到索引,单独出现使用不到索引

给enamel和deptno建立复合索引

 技术分享

 

查看索引被使用情况

 技术分享

 

or原则,or条件两端都有索引,则索引可用,有一端没有索引,则索引都不可用

技术分享

 

mysql优化之索引

标签:prim   避免   函数   fulltext   文本   没有   语法   需要   table   

原文地址:http://www.cnblogs.com/han-chun-lin/p/7505695.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!