美文网首页
关于数据查询索引失效走全表扫描的问题

关于数据查询索引失效走全表扫描的问题

作者: 金融测试民工 | 来源:发表于2020-05-18 16:00 被阅读0次

    每个版本我们都要进行全表扫描的检查,会发现明明字段加上索引,但还是走了全表扫描,所以进行了简单的分析。

影响全表扫描的因素有:(可能还有其它)

1. 返回的数据量的百分比;

2. 数据在数据库中的存储方式;

3. 舍弃的百分比

看如下例子,为什么有时候走全表扫描会比走索引更好:

    假如table A,有10万条数据,如果我们要读取其中20000条数据,也就是占比只有20%,表中每行数据大小为80字节,那么数据块大小8K,所以一个数据块有100行数据。Table A 至少会占用1000个数据块

    如果通过全表扫描,我们需要读取1000个数据块再乘以100行数据也就是100000次。

    如果通过索引要找其中20000条数据,那么你需要先读取20000个索引去找对应数据块,然后再乘以100行数据,所以如果数据分别分散在不同的数据块,通过索引找就需要2000000次。

通过对比走索引就会比全表要慢很多。

    那为什么有时候走索引会比走全表更好

    但也有例外,如果数据相对比较集中,20000条数据可能刚好就集中在前面200个数据块中,这个时候走索引就会要快一点,但是全表就一直会是100000

    还有如果数据量很大,超过20000*100,但是还是只查询20000条数据,那么这时走索引就会比走全表要快。

加上图便于理解

1 2  3  4  5  6  7  8

9  10 11 12 13 14 15 16

17 18 19 20 21 22 23 24

25 26 27 28 29 30 31 32

33 34 35 36 37 38 39……100

101 102 103 104 105 106 107 108

109 110 111 112 113 114 115 116

117 118 119 120 121 122 123 124

125 126 127 128 129 130 131 132

133 134 135 136 137 138 139……200

       ........

       ........

相关文章

  • 关于数据查询索引失效走全表扫描的问题

    每个版本我们都要进行全表扫描的检查,会发现明明字段加上索引,但还是走了全表扫描,所以进行了简单的分析。 影响全表扫...

  • mongodb 索引详解

    索引能够提高数据库的查询效率,没有索引的话,查询会进行全表扫描(scan every document in...

  • mongo索引

       不使用索引的查询称为全表扫描。通常来说,应该尽量避免全表扫描,全表扫描的效率非常低。   创建索引: db....

  • SQL-索引

    唯一索引、主键索引和聚集索引 A)索引可以避免全表扫描。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页...

  • 哪些情况会引起/要求全表扫描?

    一. 何时适用全表扫描(正面) 单表查询表很小,索引可能就比表还大;访问的数据占全表数据的百分比很大,索引访问的总...

  • 索引与优化like查询

    1. like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索...

  • 61-MySQL索引优化与查询优化-字符串前缀索引

    一、准备数据 使用邮箱查询 DESCimage.png 由于email字段没有索引,只能做全表扫描 二、前缀索引 ...

  • 我去,为什么最左前缀原则失效了?

    问题 最近,在 mysql 测试最左前缀原则,发现了匪夷所思的事情。根据最左前缀原则,本来应该索引失效,走全表扫描...

  • 索引(index)和sql查询优化

    数据库的查询方式 全表扫描:最慢 select * from tb_emp; 利用索引扫描:快,推荐使用。需要额...

  • MySQL索引的个人理解(详解)

    索引是查询优化最主要的方式; 查询方式: 一种是:全表扫描; 一种是:利用数据表上建立的所以进行扫描。 如:对表中...

网友评论

      本文标题:关于数据查询索引失效走全表扫描的问题

      本文链接:https://www.haomeiwen.com/subject/hpauohtx.html