使用MYSQL如何挑选索引

来源:互联网 发布:淘宝产品修图 编辑:程序博客网 时间:2024/05/01 09:52

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树”范围查找比较快。