Mysql查询优化——中间表方法优化count()统计大数据量总数问题
来源:互联网 发布:手机淘宝怎么改评论 编辑:程序博客网 时间:2024/03/29 03:55
在上一篇博文我们提到,分页有三种方法。其中,第三种是我们最常用的。然而,在实际应用过程中我们会发现,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.
CREATE TRIGGER `counter` AFTER INSERT ON `admin` FOR EACH ROW BEGIN UPDATE pagecount SET total=total+1 WHERE tablename = 'admin'; END;
- Mysql查询优化——中间表方法优化count()统计大数据量总数问题
- Mysql查询优化之 触发器加中间表 方法优化count()统计大数据量总数问题 转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6138288.ht
- mysql大数据量分页查询方法及其优化
- MySQL大数据量分页查询方法及其优化
- 大数据量查询优化
- 理解大数据量MySQL查询优化
- MySQL大数据量查询优化最佳方案
- mysql大数据量分页查询优化技巧
- 大数据量优化方法
- 大数据量实时统计排序分页查询 优化总结
- 大数据量查询的优化
- 大数据量查询优化性能
- 大数据量模糊查询优化
- Oracle大数据量优化查询
- mysql数据库大数据量的查询优化和分页测试
- mysql数据库大数据量的查询优化和分页测试
- 大数据量常用优化方法
- 大数据量下,分页查询优化方法解释
- Sql server 2008 r2 无法连接到(local)
- Mac上安装Scrapy上遇到的坑
- C++中delete和delete[]的区别
- 定时调度框架-在Spring中配置Quartz
- 从 iOS 视角解密 React Native 中的线程
- Mysql查询优化——中间表方法优化count()统计大数据量总数问题
- 使用ServletContextListener监听器
- 查找unity的class.jar文件
- Nginx支持Socket转发过程详解
- Java面试整理 关于Spring
- Java 7之多线程第7篇
- 科普 | 5分钟包你看懂“机器学习”
- Git命令学习
- "好好学习,天天向上",这句话用来形容对IT人的要求,最贴切不过了。