再说innodb索引
来源:互联网 发布:node v4.4.7 x64.msi 编辑:程序博客网 时间:2024/04/29 04:14
前面有的文章简要说明的mysql的索引,其中也涉及到了innodb的索引。再总结深入一下:
1,innodb的聚集索引是安装主键的顺序进行排序,而聚集索引的存储是安装指针的逻辑位置进行排序,也就是说指针的逻辑指针也是按照顺序进行递增的。
这说明:
1.1 如果在sql查询中按照主键进行排序排序操作那么是排序操作那么是非常快的,无论是升序排列还是降序排序(B+树的叶子节点为是用一个双向链表联系在一起的)
select * from table order by id limit 50; //id为主键,通过分析sql执行计划是没有进行filesort操作的;同理对主键的范围查询也是如此
select * from table where id > 2 and id < 90;
2,辅助索引,关于辅助索引的一个关键点为,辅助索引的叶子节点中包含了一个主键值。如果通过辅助索引进行数据检索的过程如下;
步骤一:在辅助索引上查找数据;
步骤二:在辅助索引上完成数据索引后,得到主键值,再通过主键值进行在聚集索引上进行第二遍的索引查找过程。
3,上述可知,两次索引查找也有些繁琐和浪费的。为了在有些情况下避免这种浪费,innodb引入了覆盖所用的的技术。
前面的文章简单说了一下覆盖索引的概念和例子,不过当时没有完全理解。下面用简单的话再次理解一遍。
几个关键点:
3.1 覆盖索引是建立在联合索引的基础之上的。也就是说用用到覆盖索引那么必须要有联合索引。如:
一张表的结构为:
create table table1 {
a int;
b int;
c varchar;
d int;
primary key (d);
key uninkey(a,b)
}
如表中存在7条数据:
d列
a列
b列
c列
1
4
2
Qw
2
4
3
Ewe
3
4
5
Wer
4
8
4
阿萨德、
5
8
1
Dfas
6
8
6
阿
7
5
1
D
索引结构为(辅助索引,a b列上建立的联合索引结构)
观察索引结构可知:
按联合索引的最左进行排序,每个节点内左边的第一个索引也进行了排序;这其实就是最左前缀原则。如扩展到三个字段建立的联合索引,依此类推。
覆盖索引,即省去了用覆盖索引查询到结果后再进行的一次聚集索引的检索。
Select b from table1 where a = 4;//select后面加上b很重要。
违反最左前缀的一种情况
Select count(*) from table1 where b >2and b < 6;
在这种情况下其实是使用到覆盖索引的,不过通过联合索引的结构进行分析,其实也只是部分用到了索引(覆盖索引)。不过不太理解。
- 再说innodb索引
- innodb 索引
- 数据结构索引-InnoDB索引
- innodb的索引机制
- Innodb 索引结构了解
- innodb 索引设计小结
- innodb索引概念
- InnoDB引擎索引大观
- InnoDB常见索引
- InnoDB索引实现
- innodb purge--聚集索引
- innodb purge--二级索引
- innodb索引区别
- InnoDB的索引
- MyISAM和InnoDB索引
- MySQL InnoDB索引
- MySQL-InnoDB索引
- Innodb 索引结构了解 - Innodb Index Structure
- QuickSort (the effect of different pivot)
- VS下打包和布置Winform项目
- Git分布式代码版本控制系统初涉
- Spring配置文件详解 - applicationContext.xml文件路径
- Android 获取 APK 签名信息及 MD5 指纹
- 再说innodb索引
- 7款开源Java反编译工具
- 剪不断,理还乱——UML的四种关系
- Hibernate对象的状态:
- 使用 MyBatis 必看两篇文档导读:MyBatis 与 MyBatis-Spring
- Session缓存:
- 欧洲要加强反垄断法打击美国科技公司
- Netflix CEO:传统广播电视16年后消亡
- [c++,kernel] 获取当前进程内存占用量