1. 程式人生 > 資料庫 >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,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資料庫計有所幫助。