测试那些事儿(六)- 数据库索引

什么是数据库索引?

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

当今关系型数据库(如MYSQL)在行业中的重要程度不用多说,业务中的数据离不开它,能够进行增删改查等操作,但这些过程也不简简单单是增删改查这四个字这么简单。比如前一章说的事务,就含有对数据库中数据进行访问与更新的操作的一系列规则。本章我们说的索引也是一样,是在查询过程中为了满足各种业务的需要,引入的一种存储结构。

为什么要使用索引?

简明扼要的说:为了快!
就拿图书来说,如果给你一本没有目录的图书,让你去找其中的某一个章节,最快的方法是什么?一页一页翻呗。如果给这本图书加上个目录,再让你去找这个章节,是不是就好找多了?查目录找到对应页码就好了。但是快是快了,代价是什么?多了几页纸,来存目录。如果日后改版,加了一个章节或者内容,所有页码都要变。这样就推导出了索引的优缺点:

优点

1.大大加快数据的检索速度;
2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
3.加速表和表之间的连接;
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

缺点

1.索引需要占物理空间;
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。

举个栗子

搜索功能是绝大部分产品都需要具备的功能,尤其大数据化的今天,它尤为重要。所以,在海量数据下的搜索性能就尤为关键。当然,我们可以通过一些业务手段来让用户体验看上去还可以,比如加个loading动画,但是永远也跳脱不出优化数据库查询这一步(这里假设我们用的是数据库,不是ES等),毕竟用户不会一直等。以一张表300万的数据量,采用单表查询来看,不使用索引搜索某一数据的时间大约为1.5s,而使用索引搜索的时间<0.01s,差距是巨大的。实际情况下再算上连表查询、排序等需求,不加索引带给我们的只能是极差的用户体验甚至业务无法使用。
索引的原理可以参考# MySQL索引-B+树(看完你就明白了)

测试人需关注

其实说到底,索引要解决的大部分问题是性能问题。对于测试来说,我们不只要关心业务功能,也要关心性能。在做搜索相关业务测试时要关注海量数据下的测试结果,并在技术评审初期考虑开发者索引的实现逻辑,防患于未然。

你可能感兴趣的:(测试那些事儿(六)- 数据库索引)