关于索引

关于索引

作者:LAMP小白  点击:1888  发布日期:2012-11-11 23:56:00  返回列表
使用索引

用来加快查询的技术有很多,其中最重要的索引,通常,能够造成查询速度最大差异的是索引是否正确使用,虽然很多情况并不是你加上索引就能迅速的解决问题,不过你不使用索引,而拼命使用其他技术来优化查询的话,我只能说你纯粹在浪费时间

1.索引的优点

一个没有索引的数据表其实可以理解为是一个无序的数据行集合,如果想找到某个特定的数据行,我们需要遍历整个表中的每条数据

这是一张我用刚才写的存储过程建立起来的多张数据表中的一张 哈哈

+-----+-----+
| id | val |
+-----+-----+
| 798 | 1 |
| 643 | 1 |
| 902 | 1 |
| 720 | 1 |
| 378 | 1 |
| 992 | 1 |
| 520 | 1 |
| 967 | 1 |
| 566 | 1 |
| 490 | 1 |
| 1 | 1 |
| 759 | 1 |
| 736 | 1 |
| 376 | 1 |
| 786 | 1 |
| 76 | 1 |
| 118 | 1 |
| 548 | 1 |
...


如果我们为id添加索引,那么我们就可以不用查询整行数据了,另一个好处是定位算法的应用(比如,二进制搜索比扫描快了很多)

对于不同数据引擎,索引实现的细节有所不同,对于MYISAM来说,数据表的数据行时再数据文件中,而索引值是在索引文件中,而innoDB的索引和数据使用着用一个表空间

在多表查询中,索引的优势将更加明显

找出3张表中同样ID的数据

mysql> SELECT tt1.id, tt2.id, tt3.id FROM `tt1` INNER JOIN `tt2` INNER JOIN `tt3` WHERE tt1.id = tt2.id AND tt2.id = tt3.id;

| 995 | 995 | 995 |
| 996 | 996 | 996 |
| 997 | 997 | 997 |
| 998 | 998 | 998 |
| 999 | 999 | 999 |
+-----+-----+-----+
1000 rows in set (0.31 sec)

可以发现MYSQL卖力的搜索了1000的3次方次,使用了0.31秒(我为我的电脑感到自豪啊 哈哈~),虽然这并不是很慢,但他揭示的问题却是真实存在的,一个没有索引的数据表加上合理的索引之后会带来巨大的性能提升

MYSQL使用索引的方式有下面几种:

1.WHERE
2.MIN() MAX()
3.ORDER
4.通过使用索引避免为一次查询整体读取数据行

2.索引的缺点

首先,索引加快了检索速度,但是缺降低了在带索引的数据列里插入,删除以及更新的效率,因为他们还必须更新索引
其次,索引占据额外的磁盘空间,对于MYISAM来说,大量的索引可能使索引文件更快的达到他的最大尺寸

3.挑选索引

尽量为搜索,分类或分组的数据列编制索引
综合考虑各数据列的维度势

即唯一值的多少

对短小的值进行索引
为字符串编制前缀编制索引
充分利用最左边的前缀
适可而止,不要建立过多的索引
让索引的类型与比较操作的类型保持匹配

比如:innoDB总是使用B树索引,而MYISAM也使用B树索引,但遇到空间数据时会改用R树,而memory默认使用散列索引,但也支持B树

散列对于精确匹配有很好的性能
B树对于范围匹配有很好的性能

利用慢查询


上一篇:存储过程中使用变量作为表名 下一篇:快递查询API
0