在上一篇博文我们提到,分页有三种方法。其中,第三种是我们最常用的。然而,在实际应用过程中我们会发现,select count(*) from tname 语句在统计某表内记录总数时,如果表内数据量达到一定规模(比如100W条),这个语句就会执行得非常慢。有什么办法可以加快统计出表内记录总数呢?

这里,我们需要借助一个中间表来记录数据库内各表记录总数。然后,在我们需要知道某表的记录总数来计算分页数时直接查询中间表获取目的表的记录总数即可。无需把目的表全部查询一次然后逐一统计。

这里有人要问了,这个中间表哪儿来的呢?嘿嘿,无需再用一个文件来定期更新!数据库已经为我们提供了一个很好的工具啦!那就是——触发器。

触发器是一种特殊的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。所以,我们只需要为每个需要监听的表创建一个触发器,使得该表有增、删操作时,自动对rowsCount中间表里相应的记录进行修改,即可同步更新中间表对各表的记录。

这里大致讲一下触发器的创建:我用的数据库桌面工具是SQLyog。

在需要监听的表上右键,选择“创建触发器”,工具会自动生成一些通用的代码如下:

CREATE
    TRIGGER `数据库名`.`触发器名` BEFORE/AFTER INSERT/UPDATE/DELETE
    ON `数据库名`.`<Table Name>`
    FOR EACH ROW

BEGIN

事件发生后执行的代码
    END

监听器有两种:事前执行与事后执行。分别对应上面的BEFORE/AFTER.

事件类型有三种:插入、修改、删除

监听对象为:数据库名.表名

事件发生后代码:触发器的主体部分。用于响应监听对象发生所监听的事件前/后所执行的sql操作。比如:修改某中间表中的数据来记录监听表的变化。

实例:为admin表创建监听器,在admin表有数据插入后,激活触发器执行,更新pagecount中间表中,tablename为admin的那条记录的total属性,因为插入了一条记录,所以total+1.

    CREATETRIGGER `counter` AFTER INSERT ON `admin` FOR EACH ROW    BEGINUPDATE pagecount SET total=total+1 WHERE tablename = 'admin';END;

Mysql查询优化——中间表方法优化count()统计大数据量总数问题相关推荐

  1. Mysql数据库平滑扩容解决高并发和大数据量问题

    目录 1 停机方案 2 停写方案 3 平滑扩容之双写方案(中小型数据) 4 平滑扩容之2N方案大数据量问题解决 4.1 扩容问题 4.2 解决方案 4.3 双主架构思想 4.4 环境部署 4.4.1 ...

  2. 搞懂 SQL 查询优化原理分析,秒速处理大数据量查询

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到 ...

  3. 一次mysql大数据量查询 慢查询导致服务阻塞后的学习

    场景还原:前一个月给朋友写了个简单的登录功能,简单的查询数据库登录逻辑,使用mysbatis-plus进行的dao层代码生成(吐槽一下这个工具,真是方便一时爽,后面维护难,比较喜欢自己能够组装和优化s ...

  4. MySQL 和 Oracle 大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  5. MySQL分库分表和优化

    第九阶段模块三 分库分表技术之MyCat 1.海量存储问题 1.1 背景描述 随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无 ...

  6. MySQL大数据量分页查询方法及其优化

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 链接:ht ...

  7. 千万级别数据查询优化_MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  8. mysql一样的查询在我本地很快但是线上很慢_MySQL大数据量分页查询方法及其优化...

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  9. 千锋重庆Java学习之MySQL大数据量分页查询方法及其优化

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...

最新文章

  1. 5000 字的 Spring MVC 全面大总结
  2. fpm定制化RPM包之nginx rpm包的制作
  3. DI(依赖注入)简单理解 NO1
  4. GIMP 2.10教程
  5. 手贱随手在Linux敲了 as 命令,出不来了
  6. XStream – XStreamely使用Java中的XML数据的简便方法
  7. 计算机组装错题整理,数学排列组合部分错题精选.docx
  8. 河南科技大学计算机专业专升本,河南科技大学成人高考计算机应用技术专业的课程有哪些...
  9. IDEA API文档的导出方式
  10. Java画十字_用Java绘制对角线
  11. android 图片 灰色,Android实现制作灰色图片
  12. gitlab 503 错误的解决方案
  13. 中北大学计算机类专业,中北大学计算机类专业好吗
  14. 本科毕业设计(论文)开题报告模板1
  15. 数据压缩作业2.1 多媒体文件分析——TGA文件
  16. SEO优化平台,常用的4种SEO手段
  17. 一个简体字对应多个繁体字的例子
  18. 2021年危险化学品经营单位安全管理人员考试资料及危险化学品经营单位安全管理人员模拟考试题
  19. 内存照片删除能恢复吗?赶紧看怎么恢复
  20. 本地系统linux/ubuntu/服务器文件创建url下载链接

热门文章

  1. raid ahci模式哪个好_比群晖好用?威联通TR-004磁盘阵列外接盒使用详解
  2. mysql-connector-java 6.x配置问题解决方案
  3. Linux系统编程1-7总结项目:进度条的实现
  4. openjudge 菲波那契数列 2753
  5. 设计模式:外观模式(C++)【颜值很重要】
  6. LeetCode 28. 实现 strStr() (java)
  7. webpack配置路径问题
  8. F2812 DSP程序运行在片内RAM和FLASH的区别
  9. 不要给a设置outline:none
  10. 如何:添加缺少的 ContentPlaceHolder