MySQL面试(二)
1、为什么索引遵循最左匹配原则?
当B+树的数据项是符合的数据结构,比如(name,age,sex)的时候,B+树是按照从左到右的顺序建立搜索树的。比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,B+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里 查询。比如当(张三,F)这样的数据来检索时,B+树可以用name来指定搜索方向,但下一个字段age的缺失,所以 只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配 特性。
2、主键索引 唯一索引 普通索引的区别?
主键是一种约束,索引是一种特殊的文件
,两者在本质上是不同的。
索引
是一种特殊的文件
,它们包含着对所有记录的引用指针
。索引可以极大地提高数据查询速度(好比一本书的目录)
,但是会降低插入删除更新表的速度
,因为在执行这些操作是,还要操作索引文件用来维护
,所以说索引不是建的越多越好而是要建在合理的字段。
索引的遵循原则
:
1、最左侧原则
,表的最左侧的一列,往往数据不会发生改变,不影响其他列的数据;
2、命名短小原则
,索引命名过长会使索引文件变大
,损耗内存
。
普通索引
:(由关键字KEY或INDEX定义的索引)的唯一任务是
加快对数据的访问速度。普通索引允许被索引的数据列包含重复的值
。如果能确定某个数据列将只包含彼此各不相同的值
,在为这个数据列常创建索引时应该用就用关键字UNIQUE
把他定义成一个唯一索引
。也就是说,唯一索引可以保证数据记录的唯一性
。
唯一索引
:不允许两行具有相同的索引值。
主键
:是一种特殊的唯一索引,一张表中只能定义一个主键索引
,通常有一列或列组合
,用于唯一标识一条记录
,使用关键字PRIMARY KEY
来创建。为表定义一个主键
将自动创建主键索引(聚簇索引)
。当在查询中使用主键索引时,它还允许快速访问数据
。
联合索引
:可以覆盖多个数据列
,像INDEX(columnA, columnB)
索引,这就是联合索引。
主键索引和唯一索引的区别:
(1) 对于主键
/unique constraint , oracle/sql server/mysql等都会自动建立唯一索引
;
(2) 主键不一定只包含一个字段
,所以在主键的其中一个字段
建唯一索引
还是有必要的;
(3) 主键可作外键
,唯一索引不可;
(4) 主键不可为空
,唯一索引可;
(5) 主键可是多个字段的组合
;
(6) 主键与唯一索引不同的是:
a.有not null
属性;
b.每个表只能有一个
。
(7) 主键索引一定是唯一索引, 唯一索引不是主键索引
(8) 主键可以与外键 构成 参照完整性约束
, 防止数据不一致