对于数据量较大的表,在其上进行统计查询通常会效率很低,并且还要考虑统计查询是否会对在线的应用产生负面影响。通常在这种情况下,使用中间表可以提高统计查询的效率,

下面通过对session 表的统计来介绍中间表的使用:

(1)session 表记录了客户每天的消费记录,表结构如下:CREATE TABLE session (

cust_id varchar(10) , --客户编号

cust_amount DECIMAL(16,2), --客户消费金额

cust_date DATE, --客户消费时间

cust_ip varchar(20) –客户IP 地址

)

(2)由于每天都会产生大量的客户消费记录,所以session 表的数据量很大,现在业务部门有一具体的需求:希望了解最近一周客户的消费总金额和近一周每天不同时段用户的消费总金额。针对这一需求我们通过2 种方法来得出业务部门想要的结果。

方法1:在session 表上直接进行统计,得出想要的结果。mysql> select sum(cust_amount) from session where cust_date>adddate(now(),-7);

+------------------+

| sum(cust_amount) |

+------------------+

| 161699200.64 |

+------------------+

1 row in set (3.95 sec)

方法2:创建中间表tmp_session,表结构和源表结构完全相同。CREATE TABLE tmp_session (

cust_id varchar(10) , --客户编号

cust_amount DECIMAL(16,2), --客户消费金额

cust_date DATE, --客户消费时间

cust_ip varchar(20) –客户IP 地址

) ;

转移要统计的数据到中间表,然后在中间表上进行统计,得出想要的结果。mysql> insert into tmp_session select * from session where cust_date>adddate(now(),-7);

Query OK, 1573328 rows affected (6.67 sec)

Records: 1573328 Duplicates: 0 Warnings: 0mysql> select sum(cust_amount) from tmp_session;

+------------------+

| sum(cust_amount) |

+------------------+

| 161699200.64 |

+------------------+

1 row in set (0.73 sec)

从上面的2 种实现方法上看,在中间表中做统计花费的时间很少(这里不计算转移数据花费的时间),另外,针对业务部门想了解“近一周每天不同时段用户的消费总金额”这一需求,在中间表上给出统计结果更为合适,原因是源数据表(session 表)cust_date 字段没有索引并且源表的数据量较大,所以在按时间进行分时段统计时效率很低,这时可以在中间表上对cust_date 字段创建单独的索引来提高统计查询的速度。

中间表在统计查询中经常会用到,其优点如下:

 中间表复制源表部分数据,并且与源表相“隔离”,在中间表上做统计查询不

会对在线应用产生负面影响。

 中间表上可以灵活的添加索引或增加临时用的新字段,从而达到提高统计查询

效率和辅助统计查询作用。

mysql 中间表的好处_Mysql中使用中间表提高统计查询速度相关推荐

  1. mysql改存储引擎教程_MySQL中修改数据表存储引擎的三种方法

    第一种方法:ALTER TABLE 将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE语句,转换表的存储引擎会导致失去原引擎相关的所有特性. 例:将mytable的引擎修改为Inn ...

  2. mysql使用联结的好处_MySQL基础之联结表

    联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用SQL的SELECT能执行的最重要的操作. 关系表 关系表的设计就是要保证把信息分解成多个表, 一类数据一个表.各 ...

  3. mysql 批量添加字段前缀_MySQL中批量前缀表的sql语句

    1.批量删除前缀表sql语句 先查询生成需要操作的表 Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.t ...

  4. mysql 中文字段报错_mysql 中 王数据表中插入中文字段报错:mysql insert into a values(202,王一); ERROR 1366 (HY000): Incorr...

    报错信息: mysql> insert into a values(202,"王一"); ERROR 1366 (HY000): Incorrect string value ...

  5. mysql两表左关联_mysql中一张表LEFT JOIN 左关联两张表语句

    先看实例 代码如下 复制代码 SELECT p.price, pd.name, m.manufacturers_name FROM (products p LEFT JOIN products_des ...

  6. mysql 修改表结构方案_MySQL中修改表结构时需要注意的一些地方

    MySql 在修改表结构的时候可能会中断产品的正常运行影响用户体验,甚至更坏的结果,丢失数据.不是所有的数据库管理员.程序员.系统管理员都非常了解Mysql能避免这种情况.DBA会经常碰到这种生产中断 ...

  7. mysql到mysqli转变表_利用mysql和mysqli取得mysql的所有数据库和库中的所有表

    /*** mysqli  op mysql demo*//***公用函数*//***功能:列出一个数据库的所有表*@param$dbname*@param$con*/functionlist_tabl ...

  8. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

  9. mysql表设计讲解_MySQL中数据库的设计归纳讲解

    谈到MySQL中数据库的设计,相信大家都知道这是实现实际业务的重要一步,因此对于Java学习者来说,深入了解和学习数据库的设计是十分有必要的.本文为大家准备了一份MySQL中数据库的设计归纳讲解,内容 ...

最新文章

  1. 某程序员leader吐槽自己的工作就是合并周报!撕逼扯淡!跪舔领导!月薪五万却非常焦虑!...
  2. 苏大JAVA题库_苏州大学Java程序设计课程试卷含答案(B)
  3. [译]通过使用Chrome的开发者工具来学习JavaScript
  4. C#组件开发 -- 索引器
  5. python安装第三方库
  6. 定义一个属性_CocosCreator脚本属性个性化定制——下拉列表属性、滑动条属性
  7. Nginx学习之八-惊群问题
  8. 微课|中学生可以这样学Python(2.3.4节):例2-2
  9. java学习(六)多线程 中
  10. win10虚拟打印服务器,win10系统安装虚拟打印机的图文方法
  11. 记忆拼图游戏设计及完整代码
  12. python数据分析之爬虫七:爬取豆瓣书籍排行榜Top250
  13. 2016年如何用正确的姿势抢“头条”?
  14. 2015.8.23——张佳莉
  15. mmdetection训练自己的VOC数据集及常见问题
  16. 关于字节跳动前端校招一二三面+HR面试过程
  17. 回忆过去,畅想未来--2016下
  18. c++ 使用递归求解回文序列问题
  19. 计算机基础知识截屏,电脑截屏技巧 截图快捷键是什么
  20. Trusted Applications介绍

热门文章

  1. javaone_代理的JavaOne 2014观察
  2. jit 和 jvm_关于JVM和JIT的一点点
  3. Spring Boot登录选项快速指南
  4. java ee基础知识_Java EE:基础知识
  5. static和瞬态_具有瞬态属性的视图对象的钝化和激活
  6. gradle构建工具_Gradle:我们需要另一个构建工具吗?
  7. java.util接口_Java 8中java.util.function包中的谓词和使用者接口
  8. Java命令行界面(第22部分):argparser
  9. java中无法推断类型参数_Java中的推断异常
  10. 使用AWS使Spring Boot应用程序无服务器运行