mysql优化之索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql优化之索引相关的知识,希望对你有一定的参考价值。
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优化之索引的主要内容,如果未能解决你的问题,请参考以下文章