MYSQL索引

一、索引的使用

1.尽量为用来搜索、分类或分组的数据列编制索引,不要为作为输出显示的数据列编制索引。换句话说,最适合有索引的数据列是那些在WHERE子句出现的数据列、在联接子句中给出的数据列,或者是在ORDER BY 或者GROUP BY子句中出现的数据列。根据SELECT关键字仅出现在输出数据列清单里的数据列最好不要有索引。

2.综合考虑各数据列的维度势。数据列的维度等于它所容纳的非重复值的个数。数据列的维度越高,它包含的独一无二的值越多,重复的值就越少。索引使用的效果也就越好。举例来看,如果一个数据列包含许多不同的年龄值,索引将迅速将数据航区分开来。但是对于记录性别的数据列,其中只有两个值“M”和“F”,这两个值出现的情况大致一样多,不管你搜索的是哪一个数值,你都会得到半数左右的数据行。

3.对短小的值进行索引。尽量选取小的数据类型。

1)短小的值可以让比较操作更快地完成,加快索引查找速度。

2)短小的值可以让索引的“体积”更小,减少磁盘I/O活动。

3)短小的键值意味着键缓存里的索引块可以容纳更多的键值,让MYSQL可以在内存里同时容纳更多的键,而这将加大在不需要从磁盘读取更多索引块的前提下在内存里找到键值的概率。

4.为字符窜值得前缀编索引。假如你有一个CHAR(200)的数据列,大多数的值得前10个或者20个字符都是唯一的,那么就可以仅为前面20个字符编制索引以节省索引中的大量空间。

5.充分利用最左边的前缀。当你创建了一个n个数据列的复合索引时,实际上就创建了MYSQL能够使用的n个索引。假如你有一个数据表,其数据列有复合索引,索引列名称是state、city、zip。索引中的数据行是以州/城市/邮政编码的顺序存储的,因此它们自动地以州/城市的顺序,同时也以州的顺序分类。这也就意味着索引能够用来搜索下面的数据列组合:

state、city、zip

state、city

state

MYSQL不能使用没有包含最左边前缀的搜索的索引。

6.适可而止,不要建立过多的索引。每一个多出的索引都要占据额外的磁盘空间,而且都会影响写入操作的性能。

7.让索引的类型与你打算进行的比较操作的类型保持匹配。在创建索引的时候,绝大多数存储引擎选择它们将使用的索引实现。比如,InnoDB,MYISAM总是使用“B树”索引。MEMORY存储引擎默认使用散列索引。散列索引在使用“=”,“<=>”比较快,范围查找比较慢,如:id<30或者weight between 100 and 150.而“B树”范围查找比较快。

二、MySQL中索引的优点和缺点和使用原则

优点:

 1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引

 2、大大加快数据的查询速度

缺点:

 1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加

 2、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

 3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

使用原则:

 通过上面说的优点和缺点,我们应该可以知道,并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。

 1、对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引。

 2、数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。

 3、在一同值少的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值