mysql 索引
索引有什么用?如何建索引?
- 索引的作用:索引是一种数据结构,用于加快mysql获取数据的速度;
- 如何建索引?在使用InnoDB引擎的前提下讨论:(1)最左前缀原理:分析业务中的查询条件,区分度高的字段放在前面,尽量减少一条SQL的影响行数;(2)A+B可以代替A,A+B+C可以代替A+B,如果查询是A+C则只能使用到A列索引;
- 关于InnoDB的认识:InnoDB使用B+Tree作为存储数据结构,属于聚簇索引,每个辅助索引最后都会指向主键的值,每次查询两次;(4)由于聚簇索引的特性,建议在使用InnoDB引擎的时候,使用自增ID作为主键,不要使用随机的业务列作为主键。
- 参考资料
作者:杜琪
链接:http://www.jianshu.com/p/5d13d4547fc0
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
假设数据 表T (a,b,c) rowid 为物理位置
rowid a b c
(1) 1 1 1
(2) 2 1 13
(3) 2 2 14
(4) 1 3 3
(5) 2 3 12
(6) 1 2 5
(7) 2 3 9
(8) 1 2 2
(9) 1 3 6
(10) 2 2 11
(11) 2 2 8
(12) 1 1 7
(13) 2 3 15
(14) 1 1 4
(15) 2 1 10
当你创建一个索引 create index xxx on t(a,b), 则索引文件逻辑上等同于如下
a b rowid
1 1 1
1 1 12
1 1 14
1 2 6
1 2 8
1 3 4
1 3 9
2 1 2
2 1 15
2 2 3
2 2 10
2 2 11
2 3 5
2 3 7
2 3 13
当select * from T where a=1 and b=3 的时候, 数据库系统可以直接从索引文件中直接二分法找到A=1的记录,然后再B=3的记录。
但如果你 where b=3 则需要遍历这个索引表的全部!
rowid a b c
(1) 1 1 1
(2) 2 1 13
(3) 2 2 14
(4) 1 3 3
(5) 2 3 12
(6) 1 2 5
(7) 2 3 9
(8) 1 2 2
(9) 1 3 6
(10) 2 2 11
(11) 2 2 8
(12) 1 1 7
(13) 2 3 15
(14) 1 1 4
(15) 2 1 10
当你创建一个索引 create index xxx on t(a,b), 则索引文件逻辑上等同于如下
a b rowid
1 1 1
1 1 12
1 1 14
1 2 6
1 2 8
1 3 4
1 3 9
2 1 2
2 1 15
2 2 3
2 2 10
2 2 11
2 3 5
2 3 7
2 3 13
当select * from T where a=1 and b=3 的时候, 数据库系统可以直接从索引文件中直接二分法找到A=1的记录,然后再B=3的记录。
但如果你 where b=3 则需要遍历这个索引表的全部!