一个产品留言统计查寻的分析比较

 

  有产品表Product(ProductId,Name,Username,AddTime...)
     留言表 Agency(AgencyId,  ProductId,  TargetUsername,IsRead...)
其中Agency.TargetUsername与Product.Username指这个产品的发布用户(以及这条留言的目标用户--不是指发留言的人),

现在要打印某一指定用户的如下列表:
 产品名称,未读留言数,总留言数

比较下面两种写法

//*******方式1:使用Agency的Targetusername

 

Select com.ProductId,com.Name,com.AddTime,
       sum(
       case rev.IsRead
            When 1 Then 1
            Else 0
       End )
           As Readed,
       sum(
       Case rev.IsRead
            When 0 Then 1
            Else 0
       End )
         As UnReaded,
        count(rev.ProductId) as Amount

From
 Agency as rev
 inner join
 Product as com on rev.ProductId=com.ProductId
 Where  rev.TargetUsername='0576sy.cn'
 Group By com.ProductId,com.Name,com.AddTime,com.OrderId
 Order By com.OrderId

//*******方式二使用Product.Username

 

Select com.ProductId,com.Name,com.AddTime,
       sum(
       case rev.IsRead
            When 1 Then 1
            Else 0
       End )
           As Readed,
       sum(
       Case rev.IsRead
            When 0 Then 1
            Else 0
       End )
         As UnReaded,
        count(rev.ProductId) as Amount

From
 Agency as rev
 inner join
 Product as com on rev.ProductId=com.ProductId
 Where  com.Username='0576sy.cn'
 Group By com.ProductId,com.Name,com.AddTime,com.OrderId
 Order By com.OrderId

//*************End

测试后发现,(Asp.net2.0,Windows2003,SQL2000,比较stopwatch)
   使用Agency.TargetUsername要比使用Product.Username作为指定用户信息过滤的条件,时间少30%左右(产品表4万条记录,留言表5万条记录),
具体分析查询分析器时发现,使用Agency.TargetUseranme时,使用的是Nested Loop 方式来实现inner join,上表是Agency(根据TargetUseranme过滤的后的记录),下表是Product,因为连接字段是productId,而ProductId是Product表的主键故内循环消耗时间比例接近零.

  使用product.Username时查询分析器显示使用 Hash Match 来实现inner join ,上表是Product,下表是Agecny,因为ProductId在Agency表中是外键故性能比较差.

 同时指定条件com.Useranme='0576sy.cn' And rev.TargetUseranme='0576sy.cn' 时,发现查寻分析器会忽略com.Useranme条件,这说明查询分析器自身的优化引擎也认可,采用rev.Targetusername,当然在Agency中引入了TargetUsername带来了数据冗余,另外时间成本降低了,空间成本却增加了.

 

转载于:https://www.cnblogs.com/wdfrog/archive/2009/11/09/1598783.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链式队列的实现(头文件及源程序)

链式队列的实现(头文件及源程序) Linkedqueue.h #ifndef __LINKEDQUEUE_H__ #define __LINKEDQUEUE_H__//元素类型定义 typedef int ElemType_Queue;//结点结构体类型定义 typedef struct Node_Queue {ElemType_Queue data;struct Node_Queue *next;}N…

单点登录的实现

单点登录的实现 token验证:https://blog.csdn.net/sleepwalker_1992/article/details/82974703转载于:https://www.cnblogs.com/yishenweilv/p/10764653.html

c++ 箭头符号怎么打_焊接图纸符号标注图解示例,焊接符号标注实例及方法

基本坡口符号坡口符号(注:图中“破”应为“坡”)焊接图纸符号标注图解示例焊接符号标注实例及方法在焊接结构图样上,焊接方法可按国家标准GB5185-85的规定用阿拉伯效字表示,标注在指引线的尾部。常用焊接方法代号见表3-9所示。如果是组合焊接…

Tekson的数据结构程序9——搜索

9. 搜索 搜索方法有:顺序搜索法(即链表搜索法)、二分搜索法、二叉树搜索法、哈希表搜索法、TRIE树搜索法。 其中,链表搜索法的搜索速度为;二分搜索法与二叉树搜索法的搜索速度为;哈希表的搜索速度为&#x…

演示: GTS流量×××和CAR流量监管的效果及相关实践计划

演示: GTS流量和CAR流量监管的效果及相关实践计划演示目标:1 理解clock rate(时钟频率)和bandwidth(带宽)与接入速率的关系2 在模拟运营商的接入路由器ISP上配置CAR监管用户流量到认购速率64K3 取证模拟的企业网络以128K的接入速率…

给所有的交叉编译工具创建软链接

给所有的交叉编译工具创建软链接 #!/bin/bash #给所有的交叉编译工具创建软链接echo "正在给所有的交叉编译工具创建软链接..." filenamsls arm-linux-gnueabi-* #获取当前文件夹下的所有以arm-linux-gnueabi-文件名开头的文件名 cont0 #记录软链接完成个数…

写在前面

硕士毕业在即,我的纯CV之路即将开始,老师提到了潜在的研究方向,一个全新的领域,可以说是新的起点。未来四年,我要想不碌碌而为,不像硕士期间一样“泛泛而学”,我必须从理论到实践都做好非常扎实…

httpclient封装获取响应实体_Httpclient 接口自动化

好久木写啦!!!好久木写啦!!!心血来潮分享点小白的东西!!!废话少说直接干货!!!本文核心是将如何从数据驱动开始,以报告结尾…

服务器控件开发之基本概念

利用ASP.NET 2.0技术,创建Web自定义服务器控件并不是一件轻松的事情。因为,这需要开发人员了解并能够灵活应用多种Web开发技术,例如,CSS样式表、客户端脚本语言、.NET开发语言、服务器控件开发技术,甚至是当前最火的AJ…

如何在Django模板中注入全局变量

我们在做一些网站项目的时候,可能会遇到需要把某个全局变量注入到所有页面的情况,比如我们做一个在线商城,那么可能需要将用户的资料:比如用户的账号、用户的姓名等注入到每个页面里面。但是如果用常规的方法,也就是在…

JavaScript 定时器

setInterval 每隔time时间后执行内部代码,后边改的time时间并不起作用 var time 2000; var obj setInterval(() > {}, time);//obj 返回的是一个数字,作为唯一标识time200; //不起作用clearInterval(obj) //清除计时器setInterval("console.…

Ubuntu18.04更换为国内源

Ubuntu18.04更换为国内源 1、打开Linux终端,执行下列命令,将源文件备份,以防万一。 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2、选择下列任意一个源,将其复制 ​ 2.1 阿里源 deb http://mirrors.aliyun.com/…

如何关闭大疆gps_如何使用djisdkforwindows从mavic 2获取gps数据?

我使用windows sdk。我正在尝试使用以下方法获取gps数据:var flightControllerHandler _djiManagerInstance.ComponentManager.GetFlightControllerHandler(ProductIndex, ComponentIndex);flightControllerHandler.AircraftLocationChanged - QuadcopterOnAircraftLocationCh…

跨线程访问控件

【转帖】 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。 首先来看传统方法: public partial class Form1 : Form { public Fo…

解析Nginx负载均衡

摘要:对于一个大型网站来说,负载均衡是永恒的话题。随着硬件技术的迅猛发展,越来越多的负载均衡硬件设备涌现出来,如F5 BIG-IP、Citrix NetScaler、Radware等等,虽然可以解决问题,但其高昂的价格却往往令人…

基于vue+mint-ui的mobile-h5的项目说明

基于vuemint-ui的mobile-h5的项目说明转载于:https://www.cnblogs.com/ysx215/p/10768656.html

Ubuntu20.04更换为国内源

Ubuntu20.04更换为国内源 1、打开Linux终端,执行下列命令,将源文件备份,以防万一。 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2、选择下列任意一个源,将其复制 ​ 2.1 阿里源 deb http://mirrors.aliyun.com/…

深圳办理cdn经营许可证_深圳危化品经营许可证申请流程怎么申请?办理危化学品经营许可证...

随着深圳地区慢慢的进入了产业整合和城市规划规范化的运营中,很多涉及到生产的公司都逐渐被有效的整合在一起了,而随着深圳地区越发有效的整合生产规划,很多地区都逐渐的在将涉及到危险化学品生产和经营的企业都进行合理的管制,在…

Discuz!NT 缓存设计简析 [原创]

作为一个社区类型软件,大并发支持和高效稳定运行永远是“硬道理”,而有效安全的使用缓存恰恰能起到事倍功半的效果。而.NET本身所提供的缓存机制又显得过于“单薄”,比如说订制不太灵活方便, 缓存对象之间层次感不强, 使用时缺乏统一的管理等…

实验七:Xen环境下cirrOS的安装配置

实验名称: Xen环境下cirrOS的安装配置 实验环境: 这里的cirrOS和实验六中的busybox的启动方式相同,唯一的区别就是我们使用的cirrOS镜像中,已经包含了根文件系统、内核文件以及ramdisk和grub程序; 只需要我们使用xen环…