`
san_yun
  • 浏览: 2582854 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

多表联合查询导致的数据重复问题

 
阅读更多
运营让我查询一个活动中参与的物品数,然后需要前60个评论+赞的人。

最开始我用子查询实现,巨慢无比:
select id,like_count,favorite_count from message_message where id in(select message_id from message_message_tags where messagetag_id=62101) and (category=9 or category=1) order by (like_count+favorite_count) desc 


原因是in子句的数据量大的话,性能就会非常低下。详见:

修改成多表查询:
 select t1.sender_id,t1.id,t1.like_count,t1.favorite_count,t1.add_datetime from message_message t1, message_message2tag t2 where t1.id = t2.message_id and t2.tag_id=120560 and t1.category in (9,1) and t1.add_datetime>'2012-06-29' and t1.add_datetime < '2012-07-03' order by (like_count+favorite_count) desc  limit 60 


性能解决了,但发现有重复记录:
+----------+------------+----------------+-----------+---------------------+
| id       | like_count | favorite_count | sender_id | add_datetime        |
+----------+------------+----------------+-----------+---------------------+
| 33850491 |          2 |            220 |    471956 | 2012-06-29 20:42:47 |
| 33778187 |         14 |            167 |    122216 | 2012-06-29 12:24:15 |
| 33779339 |          8 |            165 |    122216 | 2012-06-29 12:33:57 |
| 34068745 |          0 |            112 |      3054 | 2012-07-01 15:00:26 |
| 33782239 |          4 |             94 |    116633 | 2012-06-29 12:58:23 |
| 33815718 |          2 |             92 |      4287 | 2012-06-29 17:10:13 |
| 33905850 |          3 |             87 |     85131 | 2012-06-30 10:36:39 |
| 33827272 |          1 |             75 |    171462 | 2012-06-29 18:21:31 |
| 33778798 |          7 |             69 |    122216 | 2012-06-29 12:29:38 |
| 33780283 |          8 |             64 |    122216 | 2012-06-29 12:42:15 |
| 33816638 |          0 |             59 |      4287 | 2012-06-29 17:16:16 |

122216一个会员发了多条记录,看来需要做distinct,直接把distinct加在字段前面是没有效果,可以通过结合子查询来和group来做,最终版:

select * from (select t1.sender_id,t1.id,t1.like_count,t1.favorite_count,t1.add_datetime from message_message t1, message_message2tag t2 where t1.id = t2.message_id and t2.tag_id=120560 and t1.category in (9,1) and t1.add_datetime>'2012-06-29' and t1.add_datetime < '2012-07-03' order by (like_count+favorite_count) desc limit 60) as t group by t.sender_id order by (like_count+favorite_count) desc;



这个人提到说通过
 select *, count(distinct name) from table group by name 
来实现
http://hi.baidu.com/liveinyc/blog/item/facac543a2dc260b9213c658.html



分享到:
评论

相关推荐

    SQL Server数据库查询速度慢原因及优化方法

     6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)  7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)  8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。  9、返回了不必要...

    mysql数据库的基本操作语法

    视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据。 视图的作用、优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 创建、修改视图 create or...

    新浪:对互联数据问答用户查询的语义解释-研究论文

    关联数据基础架构的选择导致了数据源的概要,其中包含大量域上的重复和碎片信息。 使非专家用户能够访问此数据纲要的一种方法是提供可以利用关联数据的固有特征的关键字搜索框架。 由于三个主要原因,开发此类系统...

    大数据期末知识点总结.pdf

    ⼤数据概念: ⼤数据概念: ⼤数据是指数据规模⼤,尤其指因为数据形式多样、⾮结构化特征明显,导致数据存储、处理和挖掘异常困难的那类数据集。 ⼤数据性质: ⼤数据性质: ⾮结构性,不完备性,时效性,安全性,...

    mysql数据库my.cnf配置文件

    # 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300 innodb_buffer_pool_size = 1048576 # InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM. # 这里你设置越大,你在存取...

    SQL性能优化

     查询表顺序的影响  在FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下ORACLE会按表出现的顺序进行链接,由此因为表的顺序不对会产生十分耗服务器资源的数据...

    Altium Designer Beta 19.0.10完整版安装包+安装教程+和谐文件

    修复了从服务器更新组件数据时由于过多的数据请求导致的ActiveBOM延迟问题。 27535 修复了BOM报表中组件的供应商链接顺序与该组件的供应商链接参数的实际顺序(BC:9691)不匹配的问题。 27714 修复了BOM报告问题,...

    数据库命名设计规范.doc

    对于有主明细的表来说,明细表必须包含两个字段:主表关键字、SN,SN字段的类型为 int型,目的为与主表关键字联合组成明细表的关键字,以及标示明细记录的先后顺序, 如1,2,3……。表必须填写描述信息,后台表名尽量...

    数据库命名设计规范(1).doc

    对于有主明细的表来说,明细表必须包含两个字段:主表关键字、SN,SN字段的类型为 int型,目的为与主表关键字联合组成明细表的关键字,以及标示明细记录的先后顺序, 如1,2,3……。表必须填写描述信息,后台表名尽量...

    《你必须知道的495个C语言问题》

    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 27  2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 28 2.15 如何确定域在结构中的...

    你必须知道的495个C语言问题

    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 2.15 如何确定域在结构中的字节偏移...

    ETL项目

    用熊猫来合并数据使用SQL / pgAdmin在执行联合时导致行被删除随后验证所有数据是否正确传输 分析 将所有重复的标题放在数据框中,以查看哪些歌曲在多个来源和年份中很流行 为了更深入地了解所做

    java版商城源码-elasticsearch-visual::magnifying_glass_tilted_left:使用elasticsearch的javaapi进行from&size和scro

    size,数据量大的时候效率比较低,而且很费内存,每次会把from*size条记录全部加载到内存中,对结果返回前进行全局排序,然后丢弃掉范围外的结果,重复这样的操作会导致内存占用过大而使es挂掉,并且受数据条数限制...

    科锐国际2020人才市场洞察及薪酬指南.pdf

    人才缺口:数据中台的火热,导致数据平台研发、数据应用开发和数据产品经理 的职位紧缺 人才来源:互联网一二线大公司和一些专门做数据的公司 19 | 高科技 高科技 | 20 AIoT架构师 边缘计算专家 数据架构师 30-40% ...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    基于链接实体回放的多源知识图谱终身表示学习python源码+项目操作说明.zip

    但是联合训练不适用于任务不断更新和迭代的应用场景,会造成知识图谱的重复训练,导致资源浪费,且时间空间开销大.为了解决这些问题,本文提出多源知识图谱终身表示学习的范式.如图1(c)所示,随着任务不断迭代,不同的知识...

    人工智能时代.pptx

    模拟大脑神经元,建立多层网络结构之间的不同权重信号连接传导,提供尽可能多的例子,调整权重等参数直到系统稳定 神经网络 1957年康奈尔大学Frank Rosenblatt 提出名为感知机的程序化神经元,由于学术竞争导致方法...

Global site tag (gtag.js) - Google Analytics