2019-07-11
2019-07-17 本文已影响0人
邪恶的奥伯伦
索引扫描:
我们先通过index查找到数据对应的rowid值,然后根据rowid直接从表中得到具体的数据,这种查找方式称为索引扫描
在索引中,除了存储每个索引的值外,索引还存储具有此值的行对应的ROWID值。索引扫描可以由2步组成:(1) 扫描索引得到对应的rowid值。 (2) 通过找到的rowid从表中读出具体的数据。每步都是单独的一次I/O,但是对于索引,由于经常使用,绝大多数都已经CACHE到内存中,所以第1步的I/O经常是逻辑I/O,即数据可以从内存中得到。但是对于第2步来说,如果表比较大,则其数据不可能全在内存中,所以其I/O很有可能是物理I/O,这是一个机械操作,相对逻辑I/O来说,是极其费时间的。所以如果多大表进行索引扫描,取出的数据如果大于总量的5% – 10%,使用索引扫描会效率下降很多。
全表扫描:
在数据库中,对无索引的表进行查询一般称为全表扫描。Full Table Scans, FTS
哪些行为会导致全表扫描:
- 模糊查询, 左模糊查询不行, 右模糊查询可以使用索引 2. 条件中有 is null 等其他情况