面试题答案
一键面试磁盘I/O方面
- 全表扫描:
- 无索引查找时,数据库需要对整个表进行扫描。例如,一张包含100万条记录的表,若要查找符合某条件的记录,数据库必须从第一条记录开始,依次读取每一条记录,直到找到所有符合条件的记录。这意味着可能要读取整个表的数据块,导致大量的磁盘I/O操作。
- 相比之下,有索引查找可以通过索引快速定位到数据所在的位置,只需要读取少量的数据块,大大减少了磁盘I/O。例如,在B - Tree索引中,通过索引树的快速定位,可能只需要读取几个索引块和对应的数据块就能找到目标数据。
- 顺序与随机I/O:
- 无索引查找可能导致随机I/O。由于表中的数据存储不一定是按照查询条件有序的,在全表扫描过程中,磁盘磁头可能频繁地在不同的物理位置移动来读取数据块,这会增加磁盘寻道时间,降低I/O效率。
- 有索引查找在一定程度上更倾向于顺序I/O。例如,对于范围查询,B - Tree索引可以按顺序访问索引节点,进而按顺序访问对应的数据块,减少磁盘磁头的移动,提高I/O效率。
CPU资源占用方面
- 数据比较次数:
- 无索引查找时,对于每一条读取到的记录,CPU都需要将其与查询条件进行比较。在大数据量下,如100万条记录,就需要进行100万次甚至更多的比较操作,这会消耗大量的CPU资源。
- 有索引查找由于能快速定位到可能符合条件的数据,CPU只需要对这些少量的数据进行比较,大大减少了比较次数,从而降低了CPU的负担。
- 处理开销:
- 无索引查找涉及到全表数据的读取和处理,数据库需要花费更多的CPU资源来管理这些数据的读取、缓存和处理流程。例如,数据库需要在内存中管理更多的数据页,处理数据的加载和卸载等操作,这些都会增加CPU的开销。
- 有索引查找可以利用索引结构的特性,如B - Tree索引的有序性,通过较少的操作就能定位到数据,减少了数据库内部的处理逻辑,降低了CPU资源的占用。