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条件两端都有索引,则索引可用,有一端没有索引,则索引都不可用

时间: 2024-08-11 03:36:20

mysql优化之索引的相关文章

mysql 优化之索引的使用

mysql 优化之索引的使用 1:MySQL 索引简介: MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车. 拿汉语字典的目录页(索引)打比方,我们可以按拼音.笔画.偏旁部首等排序的目录(索引)快速查找到需要的字. 索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引.组合索引,即一

mysql优化之索引建立的规则

索引经常使用的数据结构为B+树.结构例如以下 如上图,是一颗b+树,关于b+树的定义能够參见B+树,这里仅仅说一些重点.浅蓝色的块我们称之为一个磁盘块,能够看到每一个磁盘块包括几个数据项(深蓝色所看到的)和指针(黄色所看到的),如磁盘块1包括数据项17和35.包括指针P1.P2.P3.P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块.真实的数据存在于叶子节点即3.5.9.10.13.15.28.29.36.60.75.79.90.99. 非叶子节点仅仅不存储真

mysql优化之索引优化

Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 索引优化 索引优化涉及到几个方面,包括了索引的类型.如何让查询使用索引,查询是索引算法的选择等等操作.(原文链接http://ddbiz.com/?p=961)涉及到数据库的查询时,大多数情况都是要建立索引的,MySQL的索引类型以及创建索引方式,可以参考其文档或者这里. 服务器参数设置 在于索引有关系的数据库参数中,有一些特别重要,如下:

MySQL优化之索引原理(二)

一,前言 ? 上一篇内容说到了MySQL存储引擎的相关内容,及数据类型的选择优化.下面再来说说索引的内容,包括对B-Tree和B+Tree两者的区别. 1.1,什么是索引 ? 索引是存储引擎用于快速找到记录的一种数据结构, 对性能的提升有很大的帮助,尤其当表中数量较大的情况下,索引正确的使用可以对性能提升几个数量级. 但是索引经常被忽略,不恰当的索引对性能可能还会带来负面效果. 1.2,什么时候添加索引 主键自动建立主键索引(唯一索引) where字句中的列,频繁作为查询字段的列 表连接关联的列

MySQL优化之——索引

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46591673 索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型. 根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节. 大多数存储引擎有更高的限制.MYSQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关: MYISAM和InnoDB存储

mysql优化和索引

表的优化 1.定长与变长分离 如 int,char(4),time核心且常用字段,建成定长,放在一张表: 而varchar,text,blob这种变长字段适合单放一张表,用主键与核心表关联. 2.常用字段和不常用字段要分离 3.在 1 对多需要关联统计的字段上,添加冗余字段. 列类型选择原则 1.字段类型优先级  整型 > date,time > enum,char > varchar > blob,text 2.够用就行,不要慷慨,大的字段浪费内存,影响速度. 3.尽量避免用NU

【Mysql优化】索引覆盖

索引覆盖 是指 如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.这种查询速度非常快,称为”索引覆盖”,比平时的查询少一次到磁盘读数据的操作.(索引正好覆盖到查询的数据) 例如下面: mysql> use exam9; Database changed mysql> desc options; +----------------+---------------+------+-----+---------+-------+ | Field | Type

MySQL优化--创建索引,以及怎样索引才会生效 (03)

1. 创建索引 (看这里) 2.索引在什么情况下才会起作用(重点)

MySQL优化GROUP BY-松散索引扫描与紧凑索引扫描

满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有).在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表. 为GROUP BY使用索引的最重要的前提条件是所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字.是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引.为该部分指定的条件,以及选择的累积函数. 由于GROUP BY 实际上也同样会进行排序操作,而