精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL去除“關聯表”重復數據,以建立聯合唯一索引

數據庫 MySQL
昨天遇到一個問題,需要對一張關系表進行重構和優化。然而這張關系表由于已有代碼沒有注重并發導致了很多的臟數據,即重復數據。解決辦法:使用insert where not exists語句和清理臟數據并建立聯合唯一索引。

前言

昨天遇到一個問題,需要對一張關系表進行重構和優化。然而這張關系表由于已有代碼沒有注重并發導致了很多的臟數據,即重復數據。

表名thread_recommend,帖子推薦表,為兩個實體user_id和thread_id的(推薦)關系表,表結構很簡單如下: 

  1. /*用戶推薦帖子記錄表*/ 
  2.  
  3. CREATE TABLE `thread_recommend` ( 
  4.  
  5. `id` int(11) NOT NULL AUTO_INCREMENT, 
  6.  
  7. `thread_id` int(11) DEFAULT NULL COMMENT '被用戶推薦的帖子編號'
  8.  
  9. `user_id` int(11) DEFAULT NULL COMMENT '推薦該帖子的用戶編號'
  10.  
  11. `status` int(11) DEFAULT '1' COMMENT '狀態0 取消推薦,1推薦'
  12.  
  13. `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '推薦時間'
  14.  
  15. PRIMARY KEY (`id`), 
  16.  
  17. KEY `userid` (`user_id`) USING BTREE 
  18.  
  19. ) ENGINE=InnoDB; 

 問題在于,由于代碼不規范,在高并發時(或數據庫壓力大時造成的延時積壓時)會出現多個(相同thread_id和user_id的)組合,如下:

 

之后你們懂的,各種和原想不一致的神奇bug噴涌而出,比如:

我剛剛取消了推薦,怎么還顯示我推薦著!!

顯示的總推薦數怎么和實際推薦用戶加起來不一樣!!

解決方案一:使用insert where not exists語句

聲明:此方案并不是***方案,不推薦使用。

先上代碼:(這里拿另一個關系表的真實query舉例,原理一樣) 

  1. INSERT INTO `user_topic` (`user_id`, `topic_id`) 
  2.  
  3. SELECT :userId, :topicid FROM `user_topic` 
  4.  
  5. WHERE NOT EXISTS (SELECT * FROM `user_topic` 
  6.  
  7. WHERE `user_topic`.`user_id` = :userId 
  8.  
  9. AND `user_topic`.`topic_id` = :topicid) 
  10.  
  11. LIMIT 1;  

(相同方法見http://stackoverflow.com/a/31...)

通過這種“插入時判斷不存在才插入并返回行數為1,存在的話返回行數為0”的方法,可以做到:

  • 只有在返回行數為1的情況下才執行之后邏輯(如緩存內的統計數+1,緩存內帖子推薦人增加此userId等等)
  • 如果返回行數為0,則接口返回error

解決方案二:清理臟數據并建立聯合唯一索引

這個方案是本文的核心了,也是我們目前認為的***實踐。

***步:查找user_id, thread_id的聯合duplication 

  1. SELECT a.* FROM `thread_recommend` a 
  2.  
  3. INNER JOIN (SELECT * FROM `thread_recommend` GROUP BY `thread_id`, `user_id` HAVING COUNT(id) > 1) b ON a.`thread_id` = b.`thread_id` AND a.`user_id` = b.`user_id` 
  4.  
  5. ORDER BY a.`user_id` ASC, a.`thread_id` ASC, a.`id` DESC  

或簡單的版本 

  1. SELECT * FROM `thread_recommend` 
  2.  
  3. WHERE (`user_id`, `thread_id`) IN (SELECT `user_id`, `thread_id` FROM `thread_recommend` GROUP BY `user_id`, `thread_id` HAVING COUNT(1) > 1);  

得到

 

哇!所有的重復項都在這里了,好想馬上把它們干掉!

現在需要將重復的條目中ID更大的所有條目都刪除,只留ID最小的那一個。

刪之前先獲得需要刪除項,比對一下,

  1. SELECT * FROM `thread_recommend` 
  2.  
  3. WHERE (`user_id`, `thread_id`) IN (SELECT `user_id`, `thread_id` FROM `thread_recommend` GROUP BY `user_id`, `thread_id` HAVING COUNT(1) > 1) 
  4.  
  5. AND `id` NOT IN (SELECT MIN(`id`) FROM `thread_recommend` GROUP BY `user_id`, `thread_id` HAVING COUNT(1) > 1);  

下一步,SELECT * FROM改成DELETE FROM,刪除!

  1. DELETE FROM `thread_recommend` 
  2.  
  3. WHERE (`user_id`, `thread_id`) IN (SELECT `user_id`, `thread_id` FROM `thread_recommend` GROUP BY `user_id`, `thread_id` HAVING COUNT(1) > 1) 
  4.  
  5. AND `id` NOT IN (SELECT MIN(`id`) FROM `thread_recommend` GROUP BY `user_id`, `thread_id` HAVING COUNT(1) > 1);  

Oops!報錯! You can't specify target table 'thread_recommend' for update in FROM clause

這是Mysql的一個小問題,我們參見解決方案 http://stackoverflow.com/a/14... 后修改一下SQL就好:

  1. DELETE FROM `thread_recommend` 
  2.  
  3. WHERE (`user_id`, `thread_id`) IN (SELECT `user_id`, `thread_id` FROM (SELECT * FROM `thread_recommend`) a GROUP BY `user_id`, `thread_id` HAVING COUNT(1) > 1) 
  4.  
  5. AND `id` NOT IN (SELECT MIN(`id`) FROM (SELECT * FROM `thread_recommend`) b GROUP BY `user_id`, `thread_id` HAVING COUNT(1) > 1);  

***,加聯合唯一索引!

  1. ALTER TABLE `thread_recommend` 
  2.  
  3. ADD UNIQUE KEY `thread_id_user_id_unique`(`thread_id`,`user_id`) USING BTREE;  

Of course,如果上述清理工作沒有完成將會報錯!

完!

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2024-08-19 09:43:00

2022-08-04 08:22:49

MySQL索引

2023-01-03 07:44:53

MySQL查詢重復

2019-10-21 09:55:12

數據庫PostgreSQL Oracle

2024-03-26 12:16:13

MySQLInnodb數據庫

2023-02-26 00:00:06

MySQL索引故障

2024-03-11 05:00:00

Python集合開發

2021-04-08 10:55:53

MySQL數據庫代碼

2011-04-13 13:05:14

重復數據刪除

2010-09-02 10:36:51

SQL刪除

2011-08-02 12:46:46

Oracle數據表建立索引

2021-11-30 10:00:01

SQL數據重復

2024-05-24 09:29:28

2011-08-18 11:18:25

Oracle唯一約束唯一索引

2025-01-24 00:00:00

數據RoaringBitmap

2024-10-16 17:04:13

2011-04-13 13:13:09

重復數據刪除

2021-09-14 13:15:43

MySQL數據庫腳本

2023-11-14 14:41:01

數據庫清除

2021-06-28 10:25:47

MySQL數據庫重復數據
點贊
收藏

51CTO技術棧公眾號

草莓视频一区| 欧美人成在线视频| 在线观看岛国av| 美女国产在线| av在线不卡电影| 国产精品久久久久久久久久尿| 男女男精品视频网站| 久久久久久爱| 色综合天天综合狠狠| 综合操久久久| 日本人妖在线| 国产不卡在线一区| 国产伦精品免费视频| 国产污片在线观看| 婷婷亚洲五月色综合| 亚洲国产免费av| 91丨九色丨蝌蚪| 亚洲福利影院| 一区二区三区在线视频免费| 欧美一区二区三区精美影视| 国内精品久久久久久久久久久| 老司机免费视频久久| 高清欧美性猛交| 日本女人性生活视频| 偷拍精品福利视频导航| 日韩三级视频中文字幕| xx欧美撒尿嘘撒尿xx| 9999精品成人免费毛片在线看 | 欧美日韩大陆一区二区| 国产在线精品91| 在线观看免费视频你懂的| 中文av字幕一区| 欧美午夜精品久久久久免费视| 黄色av小说在线观看| 国产综合一区二区| 国产精品男人的天堂| 精品免费囯产一区二区三区| 国产伊人精品| 欧美成在线视频| 蜜桃av免费观看| 精品日本12videosex| 亚洲精品小视频| 欧产日产国产精品98| 中文在线综合| 日韩欧美国产系列| 91亚洲一区二区| 高清一区二区三区av| 欧美精品自拍偷拍动漫精品| 伊人国产在线视频| 九九热这里有精品| 欧美三级视频在线观看| 色悠悠久久综合网| 福利视频一区| 欧美日韩国产bt| 日本中文字幕二区| 四虎永久精品在线| 91麻豆精品国产91久久久更新时间 | 国产午夜精品理论片在线| 欧美丝袜一区| 深夜福利91大全| 黄色录像二级片| 欧美影院一区| 欧美—级高清免费播放| 日本熟妇毛耸耸xxxxxx| 尤物在线精品| 欧美在线免费看| 99成人精品视频| 蜜桃在线一区二区三区| 亚洲va欧美va国产综合久久| 国产模特av私拍大尺度| 国产高清在线精品| 精品国产91亚洲一区二区三区www| 手机av在线免费观看| 久久午夜电影网| 亚洲国产精品www| 蜜桃视频网站在线| 亚洲国产精品人人做人人爽| 黄色免费视频大全| 久久久人成影片一区二区三区在哪下载 | 在线成人激情黄色| 男女性高潮免费网站| 尹人成人综合网| 日韩免费黄色av| 99国产在线播放| 97国产一区二区| 色中色综合成人| 91cn在线观看| 欧美性生交xxxxx久久久| 色噜噜狠狠永久免费| 久久av偷拍| 精品伊人久久97| 三级黄色录像视频| 日韩午夜av在线| 国产精品第三页| 精品国产亚洲一区二区麻豆| 91老师片黄在线观看| 亚洲一区美女| 蜜桃在线视频| 91麻豆精品国产91久久久资源速度 | 亚洲男人在线| 亚洲国产毛片完整版| 亚洲欧美另类日本| 亚洲自拍另类| 亚洲free性xxxx护士白浆| 天天综合在线视频| 国产精品传媒入口麻豆| 亚洲熟妇av日韩熟妇在线| 四虎国产精品免费久久5151| 亚洲精品乱码久久久久久金桔影视 | 蜜臀av免费观看| 97青娱国产盛宴精品视频| 国产亚洲精品成人av久久ww| 久久免费视频播放| 蜜臀久久99精品久久久画质超高清 | 成年人黄色片视频| 亚洲成人黄色| 色视频www在线播放国产成人| 日韩欧美亚洲一区二区三区| 国内成人免费视频| 色综合电影网| 国产精品高清乱码在线观看| 亚洲成人激情在线| 亚洲色偷偷综合亚洲av伊人| 日本中文一区二区三区| 国产精品一区二区三区免费| www.欧美日本韩国| 欧美日韩国产一级二级| 国精品无码人妻一区二区三区| 黄色av成人| 亚洲qvod图片区电影| 91精彩视频在线播放| 欧美性xxxx在线播放| 91精品又粗又猛又爽| 亚洲高清影视| 国产美女久久精品| 福利在线观看| 91福利国产精品| 女~淫辱の触手3d动漫| 在线亚洲国产精品网站| 国产精品区一区二区三在线播放| 亚洲精品一线| 欧美一区二区三区性视频| 糖心vlog免费在线观看| 久久激情五月激情| 自拍亚洲欧美老师丝袜| 亚洲综合伊人| 久久精品国产一区| 国产精品久久久午夜夜伦鲁鲁| 国产精品福利影院| 欧美大片久久久| 欧美激情欧美| 91久久久久久久久久久久久| 国产福利在线播放麻豆| 日韩一级在线观看| 精品视频在线观看免费| 成人黄色大片在线观看| 欧美一区二区三区爽大粗免费 | 亚洲视频精品一区| 成人免费一区| 精品国产区一区二区三区在线观看 | 美洲精品一卡2卡三卡4卡四卡| 欧美大片在线观看一区| 国产午夜福利片| 久久免费视频色| 国产视频一区二区三区在线播放 | 都市激情亚洲| 91精品国产高清久久久久久久久 | 夜色激情一区二区| 伊人网综合视频| 久久久精品日韩| 亚洲欧美国产精品桃花| 国产精品一区二区三区av | 9999在线精品视频| 欧美成人剧情片在线观看| 成人午夜免费福利| 欧美性猛交xxxx富婆弯腰| 亚洲精品成人av久久| 国产在线观看免费一区| 欧美黄色免费网址| 伊人成综合网yiren22| 国产精品一区二区三区久久| av电影免费在线观看| 日韩电视剧免费观看网站| 自拍偷拍色综合| 亚洲欧美日韩国产一区二区三区| 在线看黄色的网站| 免费成人在线网站| 成年人视频网站免费| 九九热精品视频在线观看| 成人黄色激情网| а√天堂8资源在线| 日韩专区在线观看| 人成网站在线观看| 欧美视频完全免费看| 欧美人与禽zozzo禽性配| 久久综合久久综合亚洲| 91大神免费观看| 国产精品毛片| 欧美 国产 精品| 综合亚洲自拍| av在线亚洲男人的天堂| 欧美xo影院| 欧美日韩成人精品| 99青草视频在线播放视| 亚洲国产精品中文| 国产精品一区二区黑人巨大 | 欧美日韩大尺度| 欧美午夜一区| 一卡二卡3卡四卡高清精品视频| 老牛影视av一区二区在线观看| 91精品国产综合久久久久久蜜臀 | 91精品国产手机| 久久精品视频2| 五月开心婷婷久久| 99热精品免费| 中文字幕一区二区在线播放| 亚洲天堂视频一区| 成人动漫一区二区| 少妇愉情理伦片bd| 麻豆精品视频在线观看视频| 一本色道无码道dvd在线观看| 影音先锋久久精品| 菠萝蜜视频在线观看入口| 天天射综合网视频| 色一情一区二区三区四区| 久久99精品久久久久久园产越南| 国产在线一区二| 风间由美一区二区av101| 91嫩草在线视频| 色狠狠一区二区三区| 国产精品久久久av| 欧美特黄aaaaaaaa大片| 2019av中文字幕| 岛国av在线播放| 欧美精品video| 性xxxxfjsxxxxx欧美| 欧美成人精品激情在线观看| 秋霞午夜理伦电影在线观看| 日韩视频免费中文字幕| 日本不卡在线| 久久精品国产91精品亚洲 | 亚洲私人影院在线观看| 欧美日韩国产一二三区| 国产精品乱人伦中文| 毛片视频免费播放| 日韩一区欧美一区| 91香蕉一区二区三区在线观看| 国产精品二三区| 乱h高h女3p含苞待放| 亚洲卡通欧美制服中文| 麻豆视频在线观看| 亚洲一区二区三区四区的| 国产无遮挡aaa片爽爽| 天天爽夜夜爽夜夜爽精品视频| 日韩精品手机在线| 日韩欧美中文第一页| 欧美日韩a v| 欧美日韩免费一区二区三区| 国产精品人妻一区二区三区| 日韩三级电影网址| 色婷婷综合视频| 亚洲欧美在线一区二区| jizz视频在线观看| 久久精品亚洲热| 羞羞视频在线观看免费| 97在线观看视频| 免费在线观看一区| 成人免费自拍视频| 一区二区网站| 欧美lavv| 婷婷综合激情| 国产精品久久久久久久乖乖| 先锋a资源在线看亚洲| 日韩在线不卡一区| 国产91丝袜在线播放0| 37p粉嫩大胆色噜噜噜| 成人欧美一区二区三区| 国产精彩视频在线| 在线一区二区视频| av在线亚洲天堂| 亚洲欧洲中文天堂| 福利视频在线| 国产91成人video| 亚洲男男av| 欧美激情第六页| 亚洲精品网址| 久久国产乱子伦免费精品| 国产综合久久久久影院| 日韩免费高清一区二区| 国产精品免费aⅴ片在线观看| 久久久国产成人| 欧美在线看片a免费观看| 亚洲欧美国产高清va在线播放| 国产视频久久网| 性欧美高清come| 国产精品久久久久久久久久久久久久 | 在线观看一区二区视频| 亚洲国产欧美另类| 在线观看亚洲区| 国产高清视频色在线www| 成人网在线视频| 欧美禁忌电影网| www.亚洲视频.com| 黄一区二区三区| 日韩在线免费观看av| 一区二区三区在线观看网站| 欧美在线视频精品| 日韩成人中文电影| 在线看一级片| 国产一区欧美二区三区| 久久不见久久见中文字幕免费| www.男人天堂网| 精品一区二区三区在线播放视频| 日韩精品电影一区二区| 亚洲成a人v欧美综合天堂下载| 国产又黄又粗又猛又爽| 国产亚洲精品高潮| 日本在线高清| 国产伦精品一区二区三区四区免费 | 成人h动漫精品一区二区 | 欧美三级免费观看| 好男人www在线视频| 久热99视频在线观看| 国内欧美日韩| 亚洲精蜜桃久在线| 日韩成人dvd| 精品国产无码在线观看| 欧美日韩国产精品一区二区三区四区| 午夜精品无码一区二区三区| 久久色在线播放| 永久免费观看精品视频| 亚洲视频电影| 秋霞电影一区二区| 亚洲最大成人综合网| 色婷婷综合在线| 黄色在线视频观看网站| 国产成人在线视频| 免费成人网www| 动漫av免费观看| 国产视频不卡一区| 国产一级片免费视频| 在线播放日韩av| 97精品国产综合久久久动漫日韩| 日韩成人在线资源| 日韩av在线播放中文字幕| 我不卡一区二区| 欧美日韩精品二区第二页| 日本中文字幕在线视频| 91视频国产高清| 一区二区三区在线| 香蕉视频免费网站| 亚洲一级不卡视频| 蜜桃久久一区二区三区| 91精品国产亚洲| 国产一区三区在线播放| 国产精品人人爽人人爽| 国产精品久久久久久久久免费丝袜| 亚洲天堂国产精品| 美女撒尿一区二区三区| 成人看片黄a免费看视频| 欧美日韩成人免费视频| 久久精品视频一区| 亚洲无码久久久久| 久久视频精品在线| 成人线上播放| 精品视频一区二区在线| 国产精品理论片| 国产欧美久久久| 韩国日本不卡在线| 国产亚洲一区二区三区不卡| 免费成年人高清视频| 亚洲激情自拍偷拍| 深夜视频在线免费| 国产日韩换脸av一区在线观看| 自产国语精品视频| 北岛玲一区二区| 欧美卡1卡2卡| 美女高潮视频在线看| 亚洲国产欧美一区二区三区不卡| 国产乱国产乱300精品| 中文字幕一区二区人妻电影| 久久精品2019中文字幕| 日韩高清影视在线观看| 成人在线免费播放视频| 亚洲精品伦理在线| 日本一区视频| 亚洲一区二区中文| 欧美一区二区激情视频| 亚洲素人一区二区| 黄色av网站免费在线观看| 国产成人福利网站| 在线中文一区| 欧美熟妇一区二区| 7777精品伊人久久久大香线蕉 | 一卡二卡在线视频| 欧美激情视频一区二区三区不卡| 美女久久久久| 深夜视频在线观看| 欧美日免费三级在线| xxxcom在线观看|