网站打不开,h5 WordPress,西安华为外包公司有哪些,中国常州网官网1. 什么是最左前缀原则#xff1f;以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话#xff0c;采用B树的结构#xff0c;大概的索引结构如下如果我们要进行模糊查找#xff0c;查找name 以“张开头的所有人的ID#…1. 什么是最左前缀原则以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话采用B树的结构大概的索引结构如下如果我们要进行模糊查找查找name 以“张开头的所有人的ID即 sql 语句为select ID from table where name like 张%由于在B树结构的索引中索引项是按照索引定义里面出现的字段顺序排序的索引在查找的时候可以快速定位到 ID 为 100的张一然后直接向右遍历所有张开头的人直到条件不满足为止。也就是说我们找到第一个满足条件的人之后直接向右遍历就可以了由于索引是有序的所有满足条件的人都会聚集在一起。而这种定位到最左边然后向右遍历寻找就是我们所说的最左前缀原则。2. 为什么用 B 树做索引而不用哈希表做索引?1、哈希表是把索引字段映射成对应的哈希码然后再存放在对应的位置这样的话如果我们要进行模糊查找的话显然哈希表这种结构是不支持的只能遍历这个表。而B树则可以通过最左前缀原则快速找到对应的数据。2、如果我们要进行范围查找例如查找ID为100 ~ 400的人哈希表同样不支持只能遍历全表。3、索引字段通过哈希映射成哈希码如果很多字段都刚好映射到相同值的哈希码的话那么形成的索引结构将会是一条很长的链表这样的话查找的时间就会大大增加。3. 主键索引和非主键索引有什么区别例如对于下面这个表(其实就是上面的表中增加了一个k字段),且ID是主键。主键索引和非主键索引的示意图如下其中R代表一整行的值。从图中不难看出主键索引和非主键索引的区别是非主键索引的叶子节点存放的是主键的值而主键索引的叶子节点存放的是整行数据其中非主键索引也被称为二级索引而主键索引也被称为聚簇索引。根据这两种结构我们来进行下查询看看他们在查询上有什么区别。1、如果查询语句是 select * from table where ID 100,即主键查询的方式则只需要搜索 ID 这棵 B树。2、如果查询语句是 select * from table where k 1即非主键的查询方式则先搜索k索引树得到ID100,再到ID索引树搜索一次这个过程也被称为回表。现在知道他们的区别了吧4. 为什么建议使用主键自增的索引对于这颗主键索引的树如果我们插入 ID 650 的一行数据那么直接在最右边插入就可以了但是如果插入的是 ID 350 的一行数据由于 B 树是有序的那么需要将下面的叶子节点进行移动腾出位置来插入 ID 350 的数据这样就会比较消耗时间如果刚好 R4 所在的数据页已经满了需要进行页分裂操作这样会更加糟糕。但是如果我们的主键是自增的每次插入的 ID 都会比前面的大那么我们每次只需要在后面插入就行 不需要移动位置、分裂等操作这样可以提高性能。也就是为什么建议使用主键自增的索引。