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

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(上图中的逻辑读取数) 基本上,逻辑、物理、预都等于是扫描了多少个页...查询计划生成好了以后去缓存读取数据,当发现缓存缺少所需要的数据后让缓存再次去硬盘(物理),然后从缓存中取出所有数据(逻辑)。

81220

SQL Server 中的逻辑与物理

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

1.6K90
  • MySQL逻辑架构

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

    1.1K00

    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 条数据,产生了幻

    81150

    Mysql、不可重复读、幻

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

    15410

    MySQLMySQL事务的问题:脏、幻、不可重复读

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

    16810

    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 本文来源于网络,只做技术分享,一概不负任何责任

    53510

    MySQL逻辑架构(1)

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

    54920

    MySQL逻辑架构(2)

    数据库缓冲池(buffer pool) InnoDB 存储引擎是以页为单位来管理存储空间的,我们进行的增删改查操作其实本质上都是在访问页 面(包括页面、写页面、创建新页面等操作)。...缓冲池的预特性: 2. 查询缓存 那么什么是查询缓存呢? 查询缓存是提前把 查询结果缓存 起来,这样下次不需要执行就可以直接拿到结果。...需要说明的是,在MySQL 中的查询缓存,不是缓存查询计划,而是查询对应的结果。因为命中条件苛刻,而且只要数据表 发生变化,查询缓存就会失效,因此命中率低。...3.2 缓冲池如何读取数据 缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行页面操作的时候,首先会判断该页面 是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再进...3.5 引申问题 Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把它想象成一个黑盒子。

    47920

    带你 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 && ...)

    59900

    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

    97220

    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.1K10
    领券