Hi!欢迎光临陕西省的权威思科、华为、Oracle、红帽、深信服、微软认证培训中心!
| 029-88235527
您现在所在位置:首页 > 新闻资讯 > 最新资讯 >

腾讯云负责人为什么如此看重MySQL的索引

发布日期:2020-09-23 14:08:32点击次数:

分享到:
  腾讯云数据负责人林晓斌说过:“我们面试MySQL同事的时候只考察索引和锁这两点。

  很明显,MySQL的索引重要性非常高,它经历过多个版本的迭代,从语法到底层数据结构都产生了很多的改变。

什么是索引

  在MySQL关系库内,索引是一种单独的、物理的对数据表中一列或多列的值进行排序的一种存储结构。它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

  索引的作用就像我们看书时候的目录,我们可以通过目录快速寻找到需要的内容,如果要查询大量记录的时候:

  1.搜索信息方式是对全表进行搜索,将所有记录一一取出,根据所需要的条件一一进行对比,然后再将满足的条件返回来,这样的做法对于时间的消耗是非常大的,因为表中数据较多,对磁盘空间的占用也会非常大。

  2.在表中建立索引,通过索引查询符合条件的索引值,然后将保存在索引中的ROWID找到,取出相对应的信息。

索引的优缺点

优点:

  1.大大减少了服务器需要扫描的数据量

  2.帮助服务器避免排序和临时表

  3.将随机的I/O变成顺序I/O

缺点:

  1.虽然提高了查询的速度,但是对表单的更新速度却下降了。在更新表的时候,MySQL不仅要保存数据还要保存索引的文件。

  2.建立索引会占用磁盘空间的索引文件。相对来说这个问题是比较小的,但是如果你在一个表上连续创建了多个组合的索引,那么数据插入的同时索引文件的大小也会迅速膨胀。

  3.如果某个数据列包含许多重复内容,那么建立索引就没有太大作用。

  4.如果这个表非常的小,那么简单情况下扫描全表就会更高效。

  为最经常查询和最经常排序的数据建立索引即可,这样你在每次调用的时候都可以快速查询到。

为什么 MySQL 索引选择了 B+树

原因

  1.B+树更加适合外部储存,由于内节点不储存data,所以一个节点可以储存多个内节点,每个节点能索引的范围更大更精确。这就意味着使用B+树单次磁盘的信息量更大,效率更高。

  2.MySQL是关系型数据库,经常会通过区间来访问索引列,B+树的叶子节点间按照顺序建立了链指针,对区间的访问性进行了增强,所以 B+树对索引列上的区间范围查询很友好。而 B 树每个节点的 key 和 data 在一起,无法进行区间查找。
 

MySQL关系库

 

使用索引时的注意事项

1.索引不会包含有null值的列

  只要列内包含存在null数值时都不会被包含在索引内,复合的索引只需要有一列含有null数值,那么这一列对于复合索引就是无效的。所以在设置中建议不要让字段的默认值为null。

2.使用短索引

  对串列进行索引,如果可能应该指定一个前缀长度。

  例如,如果有一个 char(255)的列,如果在前 10 个或 20 个字符内,多数值是唯一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和 I/O 操作。

3.索引列排序

  查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的。

4.like语句

  一般情况下不推荐使用like语句,如果非要使用,如何使用也是一个问题。like “%1%” 不会使用索引而 like “1%”可以使用索引。

5.不要再列上进行运算

  这会让索引失效进而造成全盘的扫描。

6.不使用not in和<>操作

  这不属于支持的范围查询条件,不会使用索引。