转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6138288.html

在上一篇博文我们提到,分页有三种方法。其中,第三种是我们最常用的。然而,在实际应用过程中我们会发现,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;

最新文章

  1. js window.onload 的一个验证
  2. [原创]Win7、Win8、Win10始终以管理员身份运行程序。
  3. 【CodeForces 672B】Different is Good
  4. (四)WebRTC手记之本地音频采集
  5. session失效后跳转到登陆页面
  6. Definition Questions
  7. Spring @ Component 的作用
  8. Bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 传递闭包,bitset
  9. Android四大组件——Service
  10. C++ 性能剖析 (二):值语义 (value semantics)
  11. 《javascript高级编程》读书笔记(两)javascript基本概念
  12. JDBC(下)
  13. 特殊权限 SUID、SGID、Sticky
  14. IntelliJ IDEA小问题通过操作软件解决
  15. PHP之ThinkPHP框架(会话)
  16. C++内存管理(转)
  17. 在Eclipse中安装python插件的方法
  18. maven核心,pom.xml详解
  19. mybatis批量增加与删除——(十五)
  20. “百度杯”CTF比赛 九月场 YeserCMS

热门文章

  1. Java并发编程的艺术(二)——重排序
  2. 自定义PreferenceActivity和PreferenceFragment的样式
  3. 修改VIM恶心的注释自动格式化
  4. How to delete team project from TFS visual studio ?
  5. 南阳ACM8-一种排序
  6. 检索(retrieval &amp;&amp; search )-单目标-多目标跟踪-MTMC Tracking和 ReID
  7. 构建-0 Gradle DSL 属性和方法【API】
  8. C# 6.0 的那些事
  9. [Python爬虫] :Selenium +phantomjs 利用 pyquery抓取脚本链接对应的内容
  10. JAVA-错误Several ports (8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.