注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

php开发lamp

《西安--木木》-经历丰富了生活。 架构师QQ群: 246695517

 
 
 

日志

 
 

【查询优化 】MySQL大表中重复字段的查询优化  

2013-06-01 13:21:38|  分类: mysql优化 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考。

  数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较。

  如果仅仅是查找数据库中name不重复的字段,很容易


SELECT min(`id`),`name`     
FROM `table`     
GROUP BY `name`;   

  但是这样并不能得到说有重复字段的id值。(只得到了最小的一个id值)

  查询哪些字段是重复的也容易

 
SELECT `name`,count(`name`) as count     
FROM `table`     
GROUP BY `name` HAVING count(`name`) >1     
ORDER BY count DESC;   

  但是要一次查询到重复字段的id值,就必须使用子查询了,于是使用下面的语句来实现MySQL大表重复字段查询。

 
SELECT `id`,`name`     
FROM `table`     
WHERE `name` in (     
   SELECT `name`     
   FROM `table`     
   GROUP BY `name` HAVING count(`name`) >1    
);  

  但是这条语句在mysql中效率太差,感觉mysql并没有为子查询生成临时表。

  于是使用先建立临时表


create table `tmptable` as (    
   SELECT `name`     
   FROM `table`     
   GROUP BY `name` HAVING count(`name`) >1    
);  

  然后使用多表连接查询

 
SELECT a.`id`, a.`name`     
FROM `table` a, `tmptable` t     
WHERE a.`name` = t.`name`;   

  结果这次结果很快就出来了。

  用 distinct去重复


SELECT distinct a.`id`, a.`name`     
FROM `table` a, `tmptable` t     
WHERE a.`name` = t.`name`; 


  评论这张
 
阅读(160)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017