国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL 聯(lián)表查詢重復數(shù)據(jù)并刪除(子查詢刪除記錄) SQL優(yōu)化

這篇具有很好參考價值的文章主要介紹了MySQL 聯(lián)表查詢重復數(shù)據(jù)并刪除(子查詢刪除記錄) SQL優(yōu)化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、業(yè)務邏輯及表介紹

數(shù)據(jù)庫表介紹:
table_a:主表(小表,表數(shù)據(jù)不可重復)
table_b:流水表(大表,記錄審核流水數(shù)據(jù))
注:兩表表結(jié)構(gòu)大致一致,流水表增加一個審核狀態(tài)的字段

業(yè)務邏輯:
主表保存唯一數(shù)據(jù),流水表記錄審核流水數(shù)據(jù),用于后續(xù)展示,并在審核成功后插入主表,在插入流水數(shù)據(jù)時完成重復數(shù)據(jù)的覆蓋。覆蓋邏輯為先刪后加,也就是在這里,出現(xiàn)了聯(lián)表刪除慢的問題。

2、優(yōu)化思路

原聯(lián)表刪除SQL語句 :
delete from table_a where id in (SELECT id FROM table_b );

優(yōu)化后的聯(lián)表刪除SQL語句(懶得繼續(xù)看的,到這即可) :
delete from table_a where exists (SELECT t.id from (select a.id from table_a a,table_b b where a.id=b.id) t where a.id=table_a.id);

3、優(yōu)化原理:

本次優(yōu)化總結(jié)講是將in ==》exists

a、那一定是exists比in語句的效率高嗎?

mysql中的 in 語句是把外表和內(nèi)表作hash 連接,而exists語句是對外表作loop循環(huán),每次loop循環(huán)再對內(nèi)表進行查詢。所以可見,這種說法其實是不準確的。實際是要區(qū)分環(huán)境的:

  1. 如果查詢的兩個表大小相當,那么用in和exists差別不大。
  2. 如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in。
  3. 此外,in與exists的索引使用情況為:in 前表索引,exists 后表索引,用上索引的快。

b、not in 和not exists的比較:

  1. not in 和not exists如果查詢語句使用了not in 那么內(nèi)外表都進行全表掃描,沒有用到索引;
  2. not extsts 的子查詢依然能用到表上的索引。

結(jié)論: 無論哪個表大,用not exists都比not in要快

c、in 與 = 的區(qū)別不大

驗證過程略…(感興趣的話自行驗證哈(o-))

4、記錄一個優(yōu)化過程中遇到的問題

sql: delete from table_a where exists (select a.idfrom table_a a,table_b b where a.id=b.id);
報錯: You can’t specify target table ‘table_a’ for update in FROM clause(不能在FROM子句中為更新指定目標表)
解決方法: mysql 可以通過子查詢得到要刪除的記錄條件,然后通過子查詢得結(jié)果匹配要刪除的記錄。但是 mysql 不能直接刪除子查詢表中的數(shù)據(jù),必須通過一個臨時表來解決。文章來源地址http://www.zghlxwxcb.cn/news/detail-402874.html

到了這里,關于MySQL 聯(lián)表查詢重復數(shù)據(jù)并刪除(子查詢刪除記錄) SQL優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SQL語句刪除重復記錄且只保留一條有效記錄

    1. 查找表中多余的重復記錄,重復記錄是根據(jù)單個字段(name)來判斷 2. 刪除表中多余的重復記錄,重復記錄是根據(jù)單個字段(id)來判斷,只留有id最小的記錄 3. 刪除表中多余的重復記錄(多個字段),只留有id最小的記錄 參考:https://blog.csdn.net/JineD/article/details/126875291

    2024年02月13日
    瀏覽(23)
  • 分享SQL重復記錄查詢的幾種方法

    分享SQL重復記錄查詢的幾種方法

    ? SQL重復記錄查詢的幾種方法,需要的朋友可以參考一下 1、查找表中多余的重復記錄,重復記錄是根據(jù)單個字段(peopleId)來判斷 代碼如下: select * from people where peopleId in (select?? peopleId from?? people group by?? peopleId having count (peopleId) 1) 2、刪除表中多余的重復記錄,重復記錄

    2024年02月12日
    瀏覽(17)
  • MySQL 數(shù)據(jù)庫查詢與數(shù)據(jù)操作:使用 ORDER BY 排序和 DELETE 刪除記錄

    使用 ORDER BY 語句按升序或降序?qū)Y(jié)果進行排序。 ORDER BY 默認按升序排序。要按降序排序結(jié)果,使用 DESC 。 示例按名稱按字母順序排序結(jié)果: ORDER BY DESC 使用 DESC 以降序排序結(jié)果。 示例按名稱以字母逆序排序結(jié)果: 您可以使用\\\"DELETE FROM\\\"語句從現(xiàn)有表格中

    2024年02月05日
    瀏覽(39)
  • mysql表中刪除重復記錄,只保留一條記錄的操作

    mysql表中刪除重復記錄,只保留一條記錄的操作

    mysql表中兩個字段重復記錄,只保留一條記錄的操作 例如有一張學生表 其中name 和 class 相同的視為重復記錄,需要保留一條記錄,刪除重復記錄, 兩種操作方式如下: 方法一: group by 查詢結(jié)果如下: 此操作找出了需要保留的記錄,即按name、class進行分組,取出id最小的記錄

    2024年02月09日
    瀏覽(30)
  • SQL刪除重復的記錄(只保留一條)-窗口函數(shù)row_number()

    SQL刪除重復的記錄(只保留一條)-窗口函數(shù)row_number()

    關于刪除mysql表中重復數(shù)據(jù)問題,本文中給到兩種辦法:聚合函數(shù)、窗口函數(shù)row_number()的方法。 (注意:MySQL從8.0開始支持窗口函數(shù)) 測試數(shù)據(jù)準備:首先創(chuàng)建一個測試表test,插入一些測試數(shù)據(jù),模擬一些重復數(shù)據(jù)(最終目標:刪除重復數(shù)據(jù),但不處理null行) 先查詢下重復數(shù)

    2024年02月05日
    瀏覽(30)
  • 玩轉(zhuǎn)MySQL數(shù)據(jù)庫之SQL優(yōu)化之慢查詢

    本系列為:MySQL數(shù)據(jù)庫詳解,為千鋒資深教學老師獨家創(chuàng)作,致力于為大家講解清晰MySQL數(shù)據(jù)庫相關知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【關注】持續(xù)追更~ 文末有本文重點總結(jié),技術類問題,也歡迎大家和我們溝通交流! 從今天開始本系列

    2024年02月06日
    瀏覽(98)
  • Mysql 復雜查詢丨聯(lián)表查詢

    Mysql 復雜查詢丨聯(lián)表查詢

    ??wei_shuo的個人主頁 ??wei_shuo的學習社區(qū) ??Hello World ! 聯(lián)表查詢(Join)是一種在數(shù)據(jù)庫中使用多個表進行關聯(lián)查詢的操作。它通過使用 JOIN 將多個表連接在一起,并根據(jù)關聯(lián)條件從這些表中檢索數(shù)據(jù) INNER JOIN(內(nèi)連接) 內(nèi)連接(Inner Join)是一種在聯(lián)表查詢中使用的

    2024年02月13日
    瀏覽(16)
  • SQL Server刪除重復數(shù)據(jù)的方法

    在SQL Server中,有多種方法可以刪除重復數(shù)據(jù)。下面將介紹幾種常用的方法,并提供相應的源代碼示例。 方法一:使用DISTINCT和臨時表 使用DISTINCT可以去除重復的行,我們可以將去重后的結(jié)果插入到一個臨時表中,然后刪除然后刪除原始表中的數(shù)據(jù),最后將臨時表中的數(shù)

    2024年02月04日
    瀏覽(18)
  • QueryWrapper構(gòu)建復雜的SQL-循環(huán)添加條件、聯(lián)表查詢

    QueryWrapper是MyBatis-Plus提供的一個查詢構(gòu)建器,用于構(gòu)建復雜的SQL查詢語句。QueryWrapper可以用于添加條件、排序、分頁等操作。 循環(huán)添加條件 在QueryWrapper中,可以使用andWhere和orWhere方法來添加多個條件,從而實現(xiàn)循環(huán)添加條件。 下面是一個示例代碼,演示如何使用QueryWrapper循

    2024年02月16日
    瀏覽(24)
  • 查詢數(shù)據(jù)庫中的重復數(shù)據(jù)記錄

    ========第一篇========= 在一張表中某個字段下面有重復記錄,有很多方法,但是有一個方法,是比較高效的,如下語句: select data_guid from adam_entity_datas a where a.rowid (select min(b.rowid) from adam_entity_datas b where b.data_guid = a.data_guid) 如果表中有大量數(shù)據(jù),但是重復數(shù)據(jù)比較少,那么可以

    2024年02月07日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包