首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL -- 扫描

的数据是保存在主键索引上,扫描实际上是直接扫描t的主键索引 获取一行,写到 net_buffer 中,默认为 16K ,控制参数为 net_buffer_length 重复获取行,直到 写满 net_buffer...State2,有一个读请求访问P3,P3被移动到链表的最前面 State3,要访问的数据页不在链表中,所以需要在 Buffer Pool 中新申请一个数据页Px,加到链表头部 Buffer Pool 冷数据扫描...扫描一个200G的,该为历史数据,平时没有什么业务访问它 按照基本LRU算法,就会把当前Buffer Pool里面的数据 全部淘汰 ,存入扫描过程中访问到的数据页 此时,对外提供业务服务的库来说...每次被访问的时候都需要做以下判断 如果这个数据页在LRU链表中 存在的时间 超过了1S,就把它移动到链表头部,否则,位置不变 存在时间的值由参数 innodb_old_blocks_time 控制 该策略是为了处理类似 扫描...的操作而定制的 但由于是 顺序扫描 数据页的 第一次被访问 和 最后一次被访问 的时间间隔不会超过1S,因此还是留在 old 区 扫描过程中,需要 新插入的数据页 ,都被放到 old 区 一个数据页会有多条记录

2.8K40

MySQL中的扫描案例

MySQL中的扫描案例 这两天看到了两种可能导致扫描的sql,这里给大家看一下,希望可以避免踩坑: 情况1: 强制类型转换的情况下,不会使用索引,扫描。...情况2: 反向查询不能使用索引,导致扫描。...=作为条件的时候,扫描的行数是的总记录行数。因此如果想要使用索引,我们就不能使用反向匹配规则。 情况3: 某些or值条件可能导致扫描。...,而使用or将二者连接起来就会导致扫描而不使用索引。...简单总结一下: 1.强制类型转换的情况下,不会使用索引,扫描 2.反向查询不能使用索引,导致扫描。 3.某些or值条件可能导致扫描

2.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL 扫描成本计算

查询优化器是 MySQL 的核心子系统之一,成本计算又是查询优化器的核心逻辑。 扫描成本作为参照物,用于和的其它访问方式的成本做对比。...任何一种访问方式,只要成本超过了扫描成本,就不会被使用。 基于扫描成本的重要地位,要讲清楚 MySQL 的成本计算逻辑,从扫描成本计算开始是个不错的选择。...扫描的成本就只剩 IO 成本、CPU 成本这两项了。 2. 计算公式 我们先从整体计算公式开始,然后逐步拆解。 扫描成本 = io_cost + 1.1 + cpu_cost + 1。...总结 计算扫描成本,最重要的无疑是这个公式:扫描成本 = io_cost + 1.1 + cpu_cost + 1。...io_cost 表示扫描 IO 成本,MySQL 先计算读取一个数据页的平均成本,然后乘以主键索引的数据页数量,得到 IO 成本。

83610

MYSQL 查询优化之路-之DISTINCT扫描

背景:今天对一个20w的做关联查询,创建各种索引,没有提高执行的效率,使用EXPLAIN检查,总是提示“Using temporary”扫描,这不是我想的。...通过度娘,各种百度,是因为DISTINCT使用了扫描,现在特别记录下来。以背查验。...1.使用explain语法,对SQL进行解释,根据其结果进行调优: MySQL 关联的算法是 Nest Loop Join,是通过驱动的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个中查询数据...a,则效率非常高,无需优化; 2)否则,因为只能对驱动表字段直接排序的缘故,会出现using temporary,所以此时需要使用STRAIGHT_JOIN明确a为驱动,来达到使用a.col...,即将其它的数据关联到a中形成一张大,再对a的全集进行过滤; 如果不能使用left join,则需灵活使用STRAIGHT_JOIN及其它技巧,以时间排序为例:

4.2K42

高水位线和扫描

高水位线对扫描方式有着至关重要的影响。当使用delete 操作 表记录时,高水位线并不会下降,随之导致的是扫描的实际开销并没有任何减少。...本文给出高水位线的描述,如何降低高水位线,以及高水 位线对扫描的影响。 一、何谓高水位线     如前所述,类似于水库中储水的水位线。只不过在数据库中用于描述段的扩展方式。     ...扫描扫描高水位线之下的所有块,包括空闲数据块(执行了delete操作)。     低高水位线       是在使用ASSM时的一个概念。...二、演示高水位线与扫描 SQL> create table t -->创建测试表 2 as 3 select rownum as id, 4 round(dbms_random.normal...19 SQL> set autotrace traceonly; -->开启autotrace SQL> select count(*) from t; -->此时SQL语句的执行计划为扫描

49120

使用索引快速扫描(Index FFS)避免扫描的若干场景

使用索引快速扫描(Index FFS)避免扫描(FTS) (文档 ID 70135.1) 什么使用使用Index FFS比FTS好? Oracle 8的Concept手册中介绍: 1....Index FFS将会扫描索引的全部块。返回的数据不会存储。Index FFS能够使用多块IO读,可以并行执行,就像扫描那样。...实例: 使用Oracle 8.0.5中标准的emp和dept(可以使用UTLSAMPL.SQL创建),不建立任何的统计数据或索引。使用autotrace产生执行计划。...准备工作:创建一个复合索引 create index emp_ix on emp(empno, deptno, ename); 查询单个,查询出索引的全部列: SQL> select /*+ INDEX_FFS...1 0 INDEX (FAST FULL SCAN) OF 'EMP_IX' (NON-UNIQUE) (Cost=4 Ca rd=21 Bytes=693) 查询单个

63920

MongoDB 定位 oplog 必须扫描吗?

这个过程通常是 根据上次拉取的位点构建一个 cursor 不断迭代 cursor 获取新的 oplog 那么问题来了,由于 MongoDB oplog 本身没有索引的,每次定位 oplog 的起点都需要进行扫描么...就会删除最老插入的数据 oplog 集合没有 id 字段,ts 可以作为 oplog 的唯一标识; oplog 集合的数据本身是按 ts 顺序组织的 oplog 没有任何索引字段,通常要找到某条 oplog 要走扫描...我们在拉取 oplog 时,第一次从头开始拉取,然后每次拉取使用完,记录最后一条 oplog 的ts字段;如果应用发生重启,这时需要根据上次拉取的 ts 字段,先找到拉取的起点,然后继续遍历。...oplogStartHack(txn, goal.getValue()); } } // Build our collection scan... // 构建扫描参数时...mongoing-mongoing) 作者:张友东 阿里云高级技术专家 MongoDB中文社区联席主席 主要关注分布式存储与数据库等技术领域,先后参与淘宝分布式文件系统TFS、阿里云数据库(PolarDB、MySQL

1.5K30

order by 主键id导致扫描的问题

一 简介 在检查某业务数据库的slowlog 时发现一个慢查询,查询时间 1.57s ,检查表结构 where条件字段存在正确的组合索引,正确的情况下优化器应该选择组合索引,而非为啥导致慢查询呢?...二 分析 案例中的MySQL数据库版本 5.6.16 将生产环境的sql做适当修改,where条件不变。读者朋友可以测试一下其他的版本。...service_id= 1 and sale_type in(3, 4) and use_status in(3, 4, 5, 6) and process_node_id= 6 order by id desc limit...ref: NULL rows: 3076 Extra: Using where 1 row in set (0.00 sec) 分析: MySQL...注意执行计划中的 access type是index,而index 意味着这个SQL在查询二级索引的时候,对二级索引进行了索引扫描,根本没有进行过滤这个行为是不合理的,因为where条件中含有 in

3.7K20

你写的每条SQL都是扫描

你写的每条SQL都是扫描吗?如果是,那MySQL可太感谢你了,每一次SQL执行都是在给MySQL上压力、上对抗。MySQL有苦难言:你不知道索引吗?你写的SQL索引都失效了不知道吗?慢查询不懂啊?...遵循第二范式的设计不一定是最优的情况,还是那句话,要根据实际的业务场景权衡利弊。 虽然把冗余数据抽离出去了,但却增加了的数量,也意味着查询数据时之间的join连接操作也变多。...如果使用非索引字段进行排序,MySQL进行额外的文件排序,将查询结果根据非索引列在磁盘中再排序一次。当我们使用explain关键字分析SQL时会发现Extra会出现Using filesort。...如果使用非索引字段进行分组,MySQL只能进行扫描后建立临时才能得出分组结果。 另外我们可以使用explain关键字来分析SQL语句的效率,查看SQL语句是否覆盖索引。...合理设计的索引确实能大大提高SQL效率,但每建立一个字段索引,MySQL就要为该索引多维护一棵B-Tree,越多的索引造成更新效率变得低下。

11221
领券