MySql常用的存储引擎有哪些,他们有啥区别?
常见的有innoDB,MyIsam.
区别:
从外键上:innodb支持外键,myisam不支持。
从事务的角度:innodb支持事务,myisam不支持。
从锁的使用:innodb支持表锁和行锁,myisam支支持表锁。
从可恢复性上看:innodb根据事务日志进行恢复,myIsam没有事务日志。
数据库的三大范式
第一范式:确保每列保持原子性,数据表中的所有字段都是不可分割的。
第二范式:确保表中每列都与主键相关。
第三范式:确保每列和主键都是之间相关,而不是间接相关。
索引的定义
索引是对数据库表一列或者多列进行排序的一种结构。
索引使用的数据结构是B+树结构。
索引的优缺点
优点:
1.加快了访问效率。
2.将随机I/O变为顺序I/O。
3.加快了表与表之间的连接。
缺点:
1.从空间角度来看:索引需要占用一定量的物理空间。
2.从时间角度来看:创建和维护索引都需要花费时间。
索引的数据结构
索引的数据结构主要有B+树索引和hash索引。在innodb中,存在这两种索引,B+树索引是默认的数据结构。
B+树索引又可以分为主键索引和辅助索引,主索引为聚簇索引,辅助索引为非聚簇索引。聚簇索引是以主键作为B+树索引的键值,叶子节点存放着完整的数据结构,非聚簇索引是以非主键作为B+树索引的键值,叶子节点存放着主键,使用非聚簇查询的时候,会先找到主键值,然后通过聚簇索引找到对应的数据。
hash索引和B+树索引的区别
1.hash索引是无序的,hash表是无序的。
2.hash索引不支持范围查找。
3.因为hash索引中存在hash冲突,所以每次查找是,hash索引的性能不稳定,B+树索引性能很稳定。
4.hash索引不支持模糊查询和最左前缀匹配。
B树和B+树的区别
1.B树的内部节点和叶子节点均存放键和值,而B+树的内部节点存放的是键,叶子节点存放的才是值。
2.B树适用于随机查询,而B+树适合顺序查询。
为什么索引使用B+树这个数据结构,而不是B树?
1.B树适用于随机检索,而B+树适合顺序索引。
2.B+树的空间利用率更高,B+树的内部节点只存放键,叶子节点只存放值,而B树内部节点和叶子节点都存放值和键。
3.B+树的性能更加稳定,所有的查找都是从内部节点到叶子节点,而B树的话,有可能在叶子节点才找到,有可能在内部节点就找到了。
聚簇索引和非聚簇索引最大的区别在于数据和索引是否分开存储。
索引在是什么情况下会失效?
1.不符合最左前缀匹配原则。
2.判断条件中有or。
3.在索引上进行计算。
3.在索引上进行隐式转换会导致索引失效。
4.在索引中使用函数会导致索引失效。
5.在索引中使用!,=,<>会导致索引失效。
6.在使用like查询时,用%开头会导致索引失效。