mysql
Innodb引擎: 提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。<br>MyIASM引擎: 不提供事务的支持,也不支持行级锁和外键
覆盖索引指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。<br>如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引<br>
MyISAM索引与InnoDB索引的区别?
最左前缀原则
回表查询
<br>
当所要查找的字段不在非主键索引树上时,需要通过叶子节点的主键值去主键索引上获取对应的行数据,这个过程称为回表操作。
ICP索引下推
(Mysql5.6及之后版本) 5.6分区表不能支持索引条件下推(ICP) 5.7支持
索引下推主要是减少了不必要的回表操作。对于查找出来的数据,先过滤掉不符合条件的,其余的再去主键索引树上查找
聚簇索引/非聚簇索引
聚簇索引
不是一种单独的索引类型,而是一种数据存储方式
其按照每张表的主键来构建一个B+树
在Innodb中,聚簇索引默认就是主键索引
自增主键和uuid作为主键的区别<br><br>由于主键使用的是聚簇索引,如果主键为自增id的话,其数据也是对应相邻的存放到磁盘上的,这种方式不用频繁移动磁盘,写入性能高;如果是uuid的形式的话,频繁的插入会频繁的移动磁盘,写入性能较低。
非聚簇索引
聚簇索引基础上重新生成了一颗B+树。因此,每新增一个索引,其表的体积就会增加,占用的磁盘空间更大。非聚簇索引其叶子节点并非直接是真实数据,其叶子节点依旧是索引节点,其存放的值是创建非聚簇索引的字段和聚簇索引的主键(主键索引)
主键/非主键索引<br>
主键索引在底层的数据存储是通过 B+ 树来实现,<br>除叶子节之外的其他节点都存储的是主键值。而叶子节点上存储的是整行的数据。<br>
除了主键索引外,其它的索引都被称为非主键索引。与主键索引不同的是,<br>非主键索引的叶子节点上存储的是主键的值<br>
索引失效的几种情况
MySQL主要提供2种方式的索引:B-Tree索引,Hash索引<br>
B+树一个节点的大小设为一页(16k)或页的倍数最为合适