mysql百万级去重_mysql优化小技巧之去除重复项(百万级数据)
mysql優(yōu)化小技巧之去除重復(fù)項(xiàng)(百萬級(jí)數(shù)據(jù))
發(fā)布時(shí)間:2018-06-11 11:54,
瀏覽次數(shù):482
, 標(biāo)簽:
mysql
說到這個(gè)去重,腦仁不禁得一疼,尤其是出具量比較大的時(shí)候。畢竟咱不是專業(yè)的DB,所以嘞,只能自己弄一下適合自己去重方法了。
首先按照常規(guī)首段,使用having函數(shù)檢查重復(fù)項(xiàng),完事一個(gè)一個(gè)的刪除。不要問我having檢測(cè)重復(fù)項(xiàng)的sql咋寫,你懂得哈。。。這個(gè)在只有幾條重復(fù)的時(shí)候還可以。要是幾千上萬條不同數(shù)據(jù)重復(fù),那咋辦。。。
完事呢,咱就考慮了,用having函數(shù)查詢的時(shí)候,原始sql如下:
select `name`,count(*) as count from sentence group by `name` having count>1
大家可以運(yùn)行感覺下,在五百萬左右的數(shù)據(jù)時(shí),那速度,麻油。。。
但是嘞,咱在不考慮優(yōu)化它的運(yùn)行速度的前提下,來考慮使用這個(gè)語句來使我們?nèi)コ龜?shù)組中的重復(fù)項(xiàng)。首先,我們要知道,我們刪除重復(fù)數(shù)據(jù)的時(shí)候需要使用的數(shù)據(jù)有哪些。id是肯定的,再來呢,篩選的條件是吧。所以嘞,上面的sql查詢出來的數(shù)據(jù),缺少了啥,id。。。那我們加上這個(gè)字段查詢下試試哈:
select id,`name`,count(*) as count from sentence group by `name` having count>1
結(jié)果呢,就會(huì)顯示出來id,name,count這三個(gè)字段。具體效果大家可以自己運(yùn)行看下。根據(jù)這些數(shù)據(jù)咱們就可以進(jìn)行去除重復(fù)項(xiàng)的操作了。
具體的sql設(shè)計(jì)就是刪除id不是咱們查詢出來的id,但是name值是咱們查詢出來的值,因?yàn)樵蹅兊臄?shù)據(jù)不是一條,所以得經(jīng)過程序處理,把所有的id用逗號(hào)拼接起來,name值用引號(hào)和逗號(hào)處理下,完事就可以進(jìn)行使用了,示例呢就在下方:
delete from sentence where id not in(1,2,3) and name in('a','b','c')
如果數(shù)據(jù)過多的話,咱們可以寫成腳本,完事再進(jìn)行分批次操作。嘿嘿,到了這里,咱們就可以進(jìn)行去除重復(fù)項(xiàng)的操作了,但是這個(gè)速度么,始終是個(gè)困擾。接下來咱們就要考慮如何來優(yōu)化這個(gè)sql,讓它的速度上去,就算是大功告成了。
既然是提升咱們sql的運(yùn)行速度,按照常理來講,首先應(yīng)該想到的那就是索引。好唄,廢話不多說,咱們先建立索引。但是給那個(gè)字段建立所以呢???這又是個(gè)問題了。
這個(gè)原則上是在你name字段可以加以區(qū)分的字段上建立的。比如,我的name字段里面儲(chǔ)存的是一條條的品牌名稱,然后呢,我有一個(gè)industry字段是來存儲(chǔ)每個(gè)品牌的行業(yè)的,所以我就在我的industry字段上建立了索引。當(dāng)然,還有更加合適的,這個(gè)就看大家咋考慮了。廢話不多說,咱直接來看看我們優(yōu)化后的sql:
select id,`name`,count(*) as count from sentence where industry = '飲品' group
by `name` having count>1
運(yùn)行結(jié)果如下:
結(jié)果說明啥,說明咱們的索引有在使用哦。。。那速度,咱不說各位看官應(yīng)該也了解。完事咱們就可以再用程序
把所有的id用逗號(hào)拼接起來,name值用引號(hào)和逗號(hào)處理下,完事就可以進(jìn)行那個(gè)去除重復(fù)項(xiàng)的大業(yè)了。效率明顯上升啊。。。
不過有的看官可能用的條件里面含有l(wèi)ike等會(huì)使索引失效的條件,那咱們還可以,把數(shù)據(jù)簡單分類,完事分別檢測(cè)每個(gè)分類的數(shù)據(jù),全部查詢出來后,可以使用程序來檢查重復(fù)項(xiàng),并且取出刪除所需要的數(shù)據(jù)。
好啦,本次分享就到這里了。如果感覺不錯(cuò)的話,請(qǐng)多多點(diǎn)贊支持哦。。。
總結(jié)
以上是生活随笔為你收集整理的mysql百万级去重_mysql优化小技巧之去除重复项(百万级数据)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ifeq makefile 或语句_学习
- 下一篇: 间接寻址级别不同_被遗忘的利息税,国债与