首页
学习
活动
专区
圈层
工具
发布

mysql 逻辑读很高

基础概念

MySQL逻辑读指的是数据库在执行查询时需要读取的数据页数。逻辑读高意味着数据库在执行查询时需要读取大量的数据页,这通常会导致查询性能下降。

相关优势

  • 高效查询:优化逻辑读可以显著提高查询效率,减少响应时间。
  • 资源利用率:降低逻辑读可以减少数据库服务器的CPU和内存使用,提高整体资源利用率。

类型

  • 简单逻辑读:读取单个数据页。
  • 复杂逻辑读:涉及多个数据页的读取,如连接操作、子查询等。

应用场景

  • 大数据查询:在处理大量数据时,优化逻辑读尤为重要。
  • 高并发系统:在高并发环境下,减少逻辑读可以提高系统的响应速度和稳定性。

问题原因

  1. 索引不足:没有合适的索引,导致数据库需要扫描大量数据页。
  2. 查询语句复杂:复杂的查询语句,如多表连接、子查询等,会增加逻辑读。
  3. 数据分布不均:数据分布不均匀,导致某些查询需要读取大量数据页。
  4. 缓存命中率低:数据库缓存命中率低,导致频繁从磁盘读取数据。

解决方法

  1. 优化索引:
    • 确保表上有合适的索引,特别是针对查询条件中的列。
    • 使用复合索引优化多列查询。
  • 简化查询语句:
    • 尽量减少子查询和多表连接的使用。
    • 使用视图或临时表简化复杂查询。
  • 数据分区:
    • 对大数据表进行分区,将数据分散到多个物理存储位置,减少单次查询的数据量。
  • 提高缓存命中率:
    • 增加数据库缓存大小,提高缓存命中率。
    • 使用查询缓存或结果集缓存,减少重复查询的逻辑读。

示例代码

假设有一个包含大量数据的表users,查询语句如下:

代码语言:txt
复制
SELECT * FROM users WHERE age > 30 AND city = 'New York';

优化索引

代码语言:txt
复制
CREATE INDEX idx_age_city ON users(age, city);

简化查询语句

代码语言:txt
复制
SELECT * FROM (SELECT * FROM users WHERE age > 30) AS subquery WHERE city = 'New York';

数据分区

代码语言:txt
复制
ALTER TABLE users PARTITION BY RANGE (age) (
    PARTITION p0 VALUES LESS THAN (30),
    PARTITION p1 VALUES LESS THAN (40),
    PARTITION p2 VALUES LESS THAN MAXVALUE
);

参考链接

通过以上方法可以有效降低MySQL的逻辑读,提高查询性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL Server 中的逻辑读与物理读

首先要理解逻辑读和物理读:   预读:用估计信息,去硬盘读取数据到缓存。预读100次,也就是估计将要从硬盘中读取了100页数据到缓存。   ...物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存再次去读硬盘。物理读10页,从硬盘中读取10页数据到缓存。   逻辑读:从缓存中取出所有数据。...所以SQL Server对于逻辑读、预读、物理读的单位是页。 示例: ? ?      ...我们可以通过公式大概推算出占用了多少页:2032*1024/8060(每页的数据容量)≈258- 表中非数据占用的空间≈290(上图中的逻辑读取数)       基本上,逻辑读、物理读、预读都等于是扫描了多少个页...查询计划生成好了以后去缓存读取数据,当发现缓存缺少所需要的数据后让缓存再次去读硬盘(物理读),然后从缓存中取出所有数据(逻辑读)。

2.1K90

MySQL中的脏读与幻读

MySQL中的脏读与幻读 引言 在数据库事务处理中,**脏读(Dirty Read)和幻读(Phantom Read)**是两种常见的数据一致性问题,尤其在多事务并发场景下容易发生。...MySQL通过事务隔离级别和锁机制来解决这些问题。本文将深入探讨这两个问题的本质、实际影响,并提供具体的解决方案。 一、概念解析 1....脏读的影响 数据不一致性:读取未提交的中间状态数据,可能导致业务逻辑错误(如错误扣款)。 决策错误:报表系统基于脏数据生成统计结果,影响业务决策。 2....事务隔离级别 MySQL通过设置不同的事务隔离级别来控制并发问题: 隔离级别 脏读 不可重复读 幻读 READ UNCOMMITTED ✔️ ✔️ ✔️ READ COMMITTED ✖️ ✔️ ✔️...解决幻读: MySQL的REPEATABLE READ通过多版本并发控制(MVCC)和Next-Key Locks实际可避免大部分幻读。

1.3K11
  • mysql脏读、幻读、不可重复读

    脏读:有个英雄表如下图所示图片第一天 小张 往里面插入数据:BEGIN;INSERT INTO heros_temp values(4, '吕布');小张还没有提交事务的时候,小李对数据表进行了访问,小张看到的结果如下图片小李读到了小张还没有提交的数据...,我们称之为“脏读”不可重复读小张想查看 id=1 的英雄是谁,于是他进行了 SQL 查询:SELECT name FROM heros_temp WHERE id = 1;图片然而此时,小李开始了一个事务操作...幻读小张想要看下数据表里都有哪些英雄图片这时当小张执行完之后,小李又开始了一个事务,往数据库里插入一个新的英雄“吕布”BEGIN;INSERT INTO heros_temp values(4, '吕布...这种异常情况我们称之为“幻读”。总结脏读:读到了其他事务还没有提交的数据。不可重复读:对某数据进行读取,发现两次读取的结果不同,也就是说没有读到相同的内容。...幻读:事务 A 根据条件查询得到了 N 条数据,但此时事务 B 更改或者增加了 M 条符合事务 A 查询条件的数据,这样当事务 A 再次进行查询的时候发现会有 N+M 条数据,产生了幻读。

    1.3K50

    MySQL逻辑架构

    一、概述 深入学习MySQL,从概览MySQL逻辑架构开始。...首先来看一下MySQL的逻辑架构图: 逻辑架构1.jpg 存储引擎架构分为三层,自上而下,分为第一层:连接层;第二层:服务层;第三层:引擎层。...如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。 第三层:**引擎层**: 存储引擎层,存储引擎负责实际的MySQL数据的存储与提取,服务器通过API 与 存储引擎进行通信。...对于有索引的表,执行的逻辑也差不多。第一次调用的是“取满足条件的第一行”这个接口,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎中已经定义好的。.... ----- 参考自MySQL实战45讲> 01节课后讨论@圈圈圆圆的回答. ---- 参考资料 [1] MYSQL提升笔记(1):MySQL逻辑架构 [2] MySQL 高级-MySQL逻辑架构图简介

    1.8K00

    Mysql 脏读、不可重复读、幻读

    在Mysql中常用的InndDB是支持并发事务的,也就是能够在同一时间允许多个事务对数据库进行操作,那么问题来了,如果一个事务在写数据,另一个事务要读数据会发生什么;如果一个事务在写数据,另一个事务也要写又会发生什么...具体来说,这就有可能产生脏读、不可重复读和幻读。事务是逻辑上的一组操作,要么全部执行,要么全部不执行脏读一个事务读取到了另一个未提交事务修改的数据。...这里我们有个学生表,初始时有8条数据:事务A在插入前先去看了下不存在主键为9的数据,符合正常逻辑。事务B直接插入了一条主键为9的数据并提交了事务。...事务隔离级别为了解决上面问题,Mysql为我们提供了4种事务隔离级别来解决。隔离级别逐渐上升,性能逐渐下降。...Mysql的默认隔离级别,避免了“脏读取”和“不可重复读取”的情况,但不能避免“幻读”。Serializable (串行化):一个事务处理的时候,其他事务都等着。

    94510

    【MySQL】MySQL事务的问题:脏读、幻读、不可重复读

    MySQL事务的问题:脏读、幻读、不可重复读 在上一篇文章中,我们已经学习过了事务相关的基础知识,今天,我们继续学习事务有可能带来的一些问题。...-- my.cnf [server] transaction-isolation = READ-UNCOMMITTED 脏读 脏读的意思就是两个事务同时在运行,其中 A 事务修改了某个字段,B 事务读取了这个字段...很明显,这就产生了问题,这个就是脏读带来的结果,一致性出现了问题。 不可重复读 不可重复读是啥意思呢?...; +----------+ | username | +----------+ | aaa | +----------+ 1 row in set (0.00 sec) 幻读 最后一个幻读...确实,它们非常类似,但是,幻读更强调的是聚合操作结果,而不是单一一条数据的修改,这就是它们两个之间最本质的区别。

    87010

    带你读 MySQL 源码:select *

    本文内容基于 MySQL 8.0.32 源码。正文1. 整体介绍对于 select * from table 中的星号,我们再熟悉不过了:它告诉 MySQL 返回表所有字段的内容。...MySQL 服务端收到 select 语句之后,会在 server 层把星号展开为表中的所有字段,然后告诉存储引擎返回这些字段的内容。...如果 with_wild 大于 0,则调用 setup_wild(thd),处理 select 字段列表中星号展开为表中所有字段的逻辑。...select 字段列表中的每个字段,遇到星号就处理,不是星号就忽略,星号的处理逻辑有 2 种:第 1 种:满足 if (subsel && ...)...这个逻辑是 server 层自主实现的,和 select * 中的星号展开为表中所有字段的逻辑不相关,我们知道有这个逻辑就可以,不展开介绍了。第 2 种:不满足 if (subsel && ...)

    1.5K00

    Mysql脏读、幻读、不可重复读(二)

    Mysql脏读、幻读、不可重复读引言在数据库领域中,脏读、幻读和不可重复读是常见的问题,特别是在并发操作的环境下。本文将详细介绍这三个问题的定义、原因以及如何通过Mysql来解决它们。1....脏读(Dirty Read)脏读指的是一个事务读取到了另一个事务未提交的数据。当一个事务修改数据但还没有提交时,另一个事务读取到了这个未提交的数据,并做出了相应的操作。...事务2在事务1未提交的情况下读取到了这条记录,导致脏读的问题。2....幻读(Phantom Read)幻读指的是一个事务在读取某个范围内的记录时,另一个事务在该范围内插入了新的记录,导致第一个事务再次读取到了该范围内的新记录,就像幻觉一样。...当事务1再次读取数据时,发现又多了一条记录,这就是幻读的问题。3.

    80400

    mysql--innodb之隔离级别+脏读+幻读

    隔离级别 READ UNCOMMITTED (未提交读) :一个事务开始之后可以看到其他事务未提交的数据,读到未提交的数据也被称作脏读 READ COMMITTED(提交读):一个事务开始之后可以看到其他事务提交的数据...,但在这个事务提交之前,对其他事务不可见 REPEATABLE READ(可重复读):可重复度保证了一个事务内读取的同一行的数据始终是一致的,这里有一个前提是必须是快照读(MVCC), 如果使用锁定读,...则极有可能出现幻读 SERIALIZABLE(可串行化):最高隔离级别,严格按照事务顺序执行,避免了不同事务之间的冲突,也避免了脏读和幻读等问题,但性能下降严重 读取问题 脏读 读取其他事务未提交的数据...锁定读会读取当前已提交的最新数据,此时也就产生了幻读 事务A 事务B select * from a where age > 4 and age 4 and age <=8 , 输出行age=5 age=6 age=7各一行,总共3行, 跟之前比没有变化,这是采用了快照读,也是就是mvcc的版本管理 参考 高性能mysql

    4210

    MySQL事务(脏读、不可重复读、幻读)

    是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元); 2.事务的四大特性ACID...3.创建事务的SQL语法 隐式事务:事务没有明显的开启或者结束的标志,在mysql中,默认是开启自动提交的 SHOW @@autocommit;   所以针对SELECT、UPDATE、DELETE...、INSERT等DQL及DML语句的执行,mysql会自动提交该事务,如果关闭就需要手动提交或者回滚来完成操作。...注意:在事务中使用truncate时,就算rollback也会清空整张表 4.多个事务在不同事务隔离级别下的并发问题   在mysql下事务的隔离级别有四种且由低到高依次为Read uncommitted...脏读的情况:对于两个事务T1与T2,T1读取了已经被T2更新但是还没有提交的字段之后,若此时T2回滚,T1读取的内容就是临时并且无效的   开启两个mysql客户端,并创建一张测试表transaction

    1.7K10

    【高性能MySQL】MySQL逻辑架构

    一,MySQL逻辑架构 第一层的服务不是MySQL独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等。 第二层架构是MySQL比较有意思的部分。...这层是MySQL的核心服务功能,包含:查询解析、分析、优化、缓存以及所有的内置函数(例如日期、时间、数学运算)所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。 第三层是存储引擎。...存储引擎负责MySQL中数据的存储和提取。服务器通过API和存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。...MySQL提供了一个API,支持线程池插件,可以使用池中少量的线程来服务大量的连接。...三、优化与执行 MySQL会解析查询,并创建内部数据结构(解析树),然后对查询进行优化,包括重写查询、决定表的读取顺序,选择合适的索引等。用户可以通过特殊的关键字提示优化器,影响它的决策过程。

    57520

    Mysql的逻辑架构

    Mysql的逻辑架构图 ? 相信很少有人看过这个图,因为我刚看见的时候也是挺萌的,在工作中一般大家都用的是Mysql也都会用,但是为啥要看这个呢,我们需要对Mysql的整体有一个简单的认知!...Mysql是分层的 整体分为 Connectors:连接驱动 Enterprise Management Services & Utillties :服务管理器和一些工具 Connection Pool...interfice : SQL接口 Parser:解析器 optimizer:优化器 Caches & buffer :缓存 Pluggable Storage Engines:存储引擎  第一次知道原来Mysql...有这么对存储引擎[捂脸] file system:文件系统 也就是C盘D盘只不过图上画的是分了NTFS和SAN files & log : 文件与日志 是不是看完对Mysql又有了一个全新的认识;我也是...作者:彼岸舞 时间:2020\07\04 内容关于:Mysql 本文来源于网络,只做技术分享,一概不负任何责任

    84310

    MySQL的逻辑架构

    MySQL的逻辑架构 1.1 MySQL的简单结构 ? ​ MySQL架构总共三层,在上图中以虚线作为划分。   ...首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。   第二层的架构包括大多数的MySQL的核心服务。...1.2 MySQL的架构图 ? 更详细的MySQL架构图 Connectors   指的是不同语言中与SQL的交互。...负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。...在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 query ,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 query

    1.4K20

    MySQL逻辑架构(1)

    逻辑架构剖析 1.1 服务器处理客户端请求 那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?...用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行 用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依 赖于此时读到的权限...这两种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。优化 器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段。...在查询优化器中,可以分为 逻辑查询 优化阶段和 物理查询 优化阶段。 4. 执行器:   截止到现在,还没有真正去读写真实的表,仅仅只是产出了一个执行计划。于是就进入了 执行器阶段 。...对于有索引的表,执行的逻辑也差不多。 SQL 语句在 MySQL 中的流程是: SQL语句→查询缓存→解析器→优化器→执行器 。

    1K20
    领券