当前位置: 首页 > 编程笔记 >

mysql优化小技巧之去除重复项实现方法分析【百万级数据】

周玺
2023-03-14
本文向大家介绍mysql优化小技巧之去除重复项实现方法分析【百万级数据】,包括了mysql优化小技巧之去除重复项实现方法分析【百万级数据】的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了mysql优化小技巧之去除重复项实现方法。分享给大家供大家参考,具体如下:

说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了。

首先按照常规首段,使用having函数检查重复项,完事一个一个的删除。不要问我having检测重复项的sql咋写,你懂得哈。。。这个在只有几条重复的时候还可以。要是几千上万条不同数据重复,那咋办。。。

完事呢,咱就考虑了,用having函数查询的时候,原始sql如下:

select `name`,count(*) as count from sentence group by `name` having count>1

大家可以运行感觉下,在五百万左右的数据时,那速度,麻油。。。

但是嘞,咱在不考虑优化它的运行速度的前提下,来考虑使用这个语句来使我们去除数组中的重复项。首先,我们要知道,我们删除重复数据的时候需要使用的数据有哪些。id是肯定的,再来呢,筛选的条件是吧。所以嘞,上面的sql查询出来的数据,缺少了啥,id。。。那我们加上这个字段查询下试试哈:

select id,`name`,count(*) as count from sentence group by `name` having count>1

结果呢,就会显示出来id,name,count这三个字段。具体效果大家可以自己运行看下。根据这些数据咱们就可以进行去除重复项的操作了。

具体的sql设计就是删除id不是咱们查询出来的id,但是name值是咱们查询出来的值,因为咱们的数据不是一条,所以得经过程序处理,把所有的id用逗号拼接起来,name值用引号和逗号处理下,完事就可以进行使用了,示例呢就在下方:

delete from sentence where id not in(1,2,3) and name in('a','b','c')

如果数据过多的话,咱们可以写成脚本,完事再进行分批次操作。嘿嘿,到了这里,咱们就可以进行去除重复项的操作了,但是这个速度么,始终是个困扰。接下来咱们就要考虑如何来优化这个sql,让它的速度上去,就算是大功告成了。

既然是提升咱们sql的运行速度,按照常理来讲,首先应该想到的那就是索引。好呗,废话不多说,咱们先建立索引。但是给那个字段建立所以呢???这又是个问题了。

这个原则上是在你name字段可以加以区分的字段上建立的。比如,我的name字段里面储存的是一条条的品牌名称,然后呢,我有一个industry字段是来存储每个品牌的行业的,所以我就在我的industry字段上建立了索引。当然,还有更加合适的,这个就看大家咋考虑了。废话不多说,咱直接来看看我们优化后的sql:

select id,`name`,count(*) as count from sentence where industry = '饮品' group by `name` having count>1

运行结果如下:

结果说明啥,说明咱们的索引有在使用哦。。。那速度,咱不说各位看官应该也了解。完事咱们就可以再用程序把所有的id用逗号拼接起来,name值用引号和逗号处理下,完事就可以进行那个去除重复项的大业了。效率明显上升啊。。。

不过有的看官可能用的条件里面含有like等会使索引失效的条件,那咱们还可以,把数据简单分类,完事分别检测每个分类的数据,全部查询出来后,可以使用程序来检查重复项,并且取出删除所需要的数据。

附:mysql rand查询优化&随机查询优化

说起这个随机查询,大家都知道使用rand()函数,但是当数据量达到一定程度的时候,查询效率就可想而知了。所以呢?我们不妨考虑下优化这个查询方案。

我的优化方式为,通过程序来随机,再配合limit来取值。咱们记录下大概思路哈。

首先查询出符合条件的数据条数,之后用PHP的rand函数来在这个数值范围内随机取值,之后直接查询就可以。

示例sql:

select count(*) from test where $where; (计算所需要的数据的总条数)

$offset = rand(0,$count)

select * from test where $where limit $offset,1;   (查询出所需数据)

大家可以动手试试。五百万左右的数据情况下,查询速度较之mysql的rand函数查询方式快了最少十倍。

好啦,本次分享就到这里了。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

 类似资料:
  • 本文向大家介绍Mysql优化技巧之Limit查询的优化分析,包括了Mysql优化技巧之Limit查询的优化分析的使用技巧和注意事项,需要的朋友参考一下 前言 在实际业务中对于分页来说是一个比较常见的业务需求。那么就会使用到limit查询,当我们在使用Limit查询的时候,在数据比较小、或者只查询前面一部分数据的时候效率是很高的。但是当数据量大的时候,或者查询offset数量比较大的时候,如:lim

  • 本文向大家介绍MySQL百万级数据量分页查询方法及其优化建议,包括了MySQL百万级数据量分页查询方法及其优化建议的使用技巧和注意事项,需要的朋友参考一下 数据库SQL优化是老生常谈的问题,在面对百万级数据量的分页查询,又有什么好的优化建议呢?下面将列举了一些常用的方法,供大家参考学习! 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM

  • 本文向大家介绍MySQL性能优化技巧分享,包括了MySQL性能优化技巧分享的使用技巧和注意事项,需要的朋友参考一下 MySQL性能优化 在互联网公司MySQL的使用非常广泛,大家经常会有MySQL性能优化方面的需求。整理了一些在MySQL优化方面的实用技巧。 Schema与数据类型优化 整数通常是标识列最好的选择,因为它们很快并且可以使用AUTO_INCREMENT 完全“随机”的字符串(如:MD

  • 本文向大家介绍mysql 开发技巧之JOIN 更新和数据查重/去重,包括了mysql 开发技巧之JOIN 更新和数据查重/去重的使用技巧和注意事项,需要的朋友参考一下 主要涉及:JOIN 、JOIN 更新、GROUP BY HAVING 数据查重/去重 1 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN(MySQL 不支持)、CROSS JOIN 这是在网上找到

  • 本文向大家介绍JS简单实现数组去重的方法分析,包括了JS简单实现数组去重的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS简单实现数组去重的方法。分享给大家供大家参考,具体如下: 运行结果: 关于indexOf()方法: indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 stringObject.indexOf(searchvalue,frominde

  • 本文向大家介绍Mysql删除重复的数据 Mysql数据去重复,包括了Mysql删除重复的数据 Mysql数据去重复的使用技巧和注意事项,需要的朋友参考一下 MySQL数据库中查询重复数据 select * from employee group by emp_name having count (*)>1; Mysql  查询可以删除的重复数据 select t1.* from employee