搜尋
首頁資料庫mysql教程mysql的join查詢和多次查詢方法是什麼

    join查詢與多次查詢比較

    #MySQL多表關聯查詢效率高點還是多次單表查詢效率高?

    在資料量不夠大的時候,用join沒有問題,但一般都會拉到service層上去做

    第一:單機資料庫運算資源很貴,資料庫同時要服務寫和讀,都需要消耗CPU,為了能讓資料庫的吞吐變得更高,而業務又不在乎那幾百微妙到毫秒級的延時差距,業務會把更多計算放到service層做,畢竟運算資源很好水平擴展,資料庫很難啊,所以大多數業務會把純運算操作放到service層做,而將資料庫當成一種帶事務能力的kv系統來使用,這是一種重業務,輕DB的架構思路

    第二:許多複雜的業務可能會因為發展的歷史原因,一般不會只用一種資料庫,一般會在多個資料庫上加一層中間件,多個資料庫之間就沒辦法join了,自然業務會抽像出一個service層,降低對資料庫的耦合。

    第三:對於一些大型公司由於資料規模龐大,不得不對資料庫進行分庫分錶,對於分庫分錶的應用,使用join也受到了很多限制,除非業務能夠很好的根據sharding key明確要join的兩個表在同一個實體函式庫。而中間件一般對跨庫join都支援不好。

    舉一個很常見的業務例子,在分庫分錶中,要同步更新兩個表,這兩個表位於不同的物理庫中,為了保證資料一致性,一種做法是透過分散式事務中間件將兩個更新操作放到一個事務中,但這樣的操作一般要加全域鎖,效能很捉急,而有些業務能夠容忍短暫的資料不一致,怎麼做?讓它們分別更新唄,但是會存在資料寫失敗的問題,那就起個定時任務,掃描下A表有沒有失敗的行,然後看看B表是不是也沒寫成功,然後對這兩條關聯記錄做訂正,這時候同樣沒辦法用join去實現,只能將資料拉到service層應用自己來合併了。 。 。

    事實上,以分解關聯查詢的方式重構查詢具有以下優點:

    讓快取的效率更高。

    許多應用程式可以方便地快取單表查詢對應的結果物件。另外對於MySQL的查詢快取來說,如果關聯中的某個表發生了變化,那麼就無法使用查詢快取了,而拆分後,如果某個表很少改變,那麼基於該表的查詢就可以重複利用查詢快取結果了。

    將查詢分解後,執行單一查詢可以減少鎖定的競爭。

    在應用程式層做關聯,可以更容易對資料庫進行拆分,更容易做到高效能和可擴展。

    查詢本身效率也可能會有所提升

    可以減少冗餘記錄的查詢。

    更進一步,這樣做相當於在應用中實作了雜湊關聯,而不是使用MySQL的巢狀環關聯,某些場景雜湊關聯的效率更高很多。

    查詢語句join、on、where執行順序

    MySQL 的執行順序

    一、典型SELECT語句完整的執行順序

    1)from子句組裝來自不同資料來源的資料;

    2)使用on進行join連接的資料篩選

    3)where子句基於指定的條件對記錄行進行篩選;

    4) group by子句將資料分割為多個分組;

    5)cube,rollup

    6)使用聚集函數計算;

    7)使用having子句篩選分組;

    8)計算所有的表達式;

    9)計算select的欄位;

    10)使用distinct 進行資料去重

    #11)使用order by對結果集進行排序。

    12)選擇TOPN的資料

    二、from

    如果是採用的關聯from tableA, tableB ,這2個表格會先組織進行笛卡爾積,然後在進行下面的where、group by 等操作。

    三、on

    如果使用left join, inner join 或 outer full join的時候,使用on 進行條件篩選後,在進行join。

    看下面的2個sql 和結果。這兩者的差異在於它們在on和where語句位置之後的差異。首先使用 on 進行條件篩選,接著執行 join 操作,在這之後再應用 where 條件篩選。

    使用join先進行連接,接著使用on進行篩選,會形成笛卡爾積。這樣的left join 和 直連接 沒有任何的差別。所以肯定是先on 條件篩選後,在進行join。 如果在WHERE之後,在ON之上,進行JOIN操作,下面這兩個SQL查詢的結果應該會相同。由此可見,where是針對 join 後的集合所進行的篩選。

    mysql的join查詢和多次查詢方法是什麼 綜上: 先 執行on 條件篩選, 在進行join, 最後進行where 篩選

    ###
    SELECT DISTINCT a.domain , b.domain
    FROM mal_nxdomains_raw a
    LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain AND b.date = ‘20160403'
    WHERE a.date = ‘20160403'
    ##########
    SELECT DISTINCT a.domain , b.domain
    FROM mal_nxdomains_raw a
    LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain #and b.date = ‘20160403'
    WHERE a.date = ‘20160403'
    AND b.date = ‘20160403'

    mysql的join查詢和多次查詢方法是什麼

    四、on 条件与where 条件

    1、使用位置

    • on 条件位置在join后面

    • where 条件在join 与on完成的后面

    2、使用对象

    • on 的使用对象是被关联表

    • where的使用对象可以是主表,也可以是关联表

    3、选择与使用

    主表条件筛选:只能在where后面使用。

    被关联表,如果是想缩小join范围,可以放置到on后面。如果是关联后再查询,可以放置到where 后面。

    如果left join 中,where条件有对被关联表的 关联字段的 非空查询,与使用inner join的效果后,在进行where 筛选的效果是一样的。不能起到left join的作用。

    五、join 流程

    在表A和表B的联接中,从A表中选出一条记录,并将其传递到B表进行扫描和匹配。所以A的行数决定查询次数,B表的行数决定扫描范围。需要运行100次从A表中取出一条数据,然后进行200次比对,将结果存储到B表中。

    相对来说从A表取数据消耗的资源比较多。所以尽量tableA选择比较小的表。同时缩小B表的查询范围。

    但是实际应用中,因为二者返回的数据结果不同,使用的索引也不同,导致条件放置在on 和 where 效率是不一定谁更好。要根据需求来确定。

    以上是mysql的join查詢和多次查詢方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
    在MySQL中使用視圖的局限性是什麼?在MySQL中使用視圖的局限性是什麼?May 14, 2025 am 12:10 AM

    mysqlviewshavelimitations:1)他們不使用Supportallsqloperations,限制DatamanipulationThroughViewSwithJoinsOrsubqueries.2)他們canimpactperformance,尤其是withcomplexcomplexclexeriesorlargedatasets.3)

    確保您的MySQL數據庫:添加用戶並授予特權確保您的MySQL數據庫:添加用戶並授予特權May 14, 2025 am 12:09 AM

    porthusermanagementinmysqliscialforenhancingsEcurityAndsingsmenting效率databaseoperation.1)usecReateusertoAddusers,指定connectionsourcewith@'localhost'or@'%'。

    哪些因素會影響我可以在MySQL中使用的觸發器數量?哪些因素會影響我可以在MySQL中使用的觸發器數量?May 14, 2025 am 12:08 AM

    mysqldoes notimposeahardlimitontriggers,butacticalfactorsdeterminetheireffactective:1)serverConfiguration impactactStriggerGermanagement; 2)複雜的TriggerSincreaseSySystemsystem load; 3)largertablesslowtriggerperfermance; 4)highConconcConcrencerCancancancancanceTigrignecentign; 5); 5)

    mysql:存儲斑點安全嗎?mysql:存儲斑點安全嗎?May 14, 2025 am 12:07 AM

    Yes,it'ssafetostoreBLOBdatainMySQL,butconsiderthesefactors:1)StorageSpace:BLOBscanconsumesignificantspace,potentiallyincreasingcostsandslowingperformance.2)Performance:LargerrowsizesduetoBLOBsmayslowdownqueries.3)BackupandRecovery:Theseprocessescanbe

    mySQL:通過PHP Web界面添加用戶mySQL:通過PHP Web界面添加用戶May 14, 2025 am 12:04 AM

    通過PHP網頁界面添加MySQL用戶可以使用MySQLi擴展。步驟如下:1.連接MySQL數據庫,使用MySQLi擴展。 2.創建用戶,使用CREATEUSER語句,並使用PASSWORD()函數加密密碼。 3.防止SQL注入,使用mysqli_real_escape_string()函數處理用戶輸入。 4.為新用戶分配權限,使用GRANT語句。

    mysql:blob和其他無-SQL存儲,有什麼區別?mysql:blob和其他無-SQL存儲,有什麼區別?May 13, 2025 am 12:14 AM

    mysql'sblobissuitableForStoringBinaryDataWithInareLationalDatabase,而ilenosqloptionslikemongodb,redis和calablesolutionsolutionsolutionsoluntionsoluntionsolundortionsolunsonstructureddata.blobobobissimplobisslowdeperformberbutslowderformandperformancewithlararengedata;

    mySQL添加用戶:語法,選項和安全性最佳實踐mySQL添加用戶:語法,選項和安全性最佳實踐May 13, 2025 am 12:12 AM

    toaddauserinmysql,使用:createUser'username'@'host'Indessify'password'; there'showtodoitsecurely:1)choosethehostcarecarefullytocon trolaccess.2)setResourcelimitswithoptionslikemax_queries_per_hour.3)usestrong,iniquepasswords.4)Enforcessl/tlsconnectionswith

    MySQL:如何避免字符串數據類型常見錯誤?MySQL:如何避免字符串數據類型常見錯誤?May 13, 2025 am 12:09 AM

    toAvoidCommonMistakeswithStringDatatatPesInMysQl,CloseStringTypenuances,chosethirtightType,andManageEngencodingAndCollat​​ionsEttingSefectery.1)usecharforfixed lengengtrings,varchar forvariable-varchar forbariaible length,andtext/blobforlargerdataa.2 seterters seterters seterters

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱門文章

    熱工具

    Atom編輯器mac版下載

    Atom編輯器mac版下載

    最受歡迎的的開源編輯器

    SublimeText3 英文版

    SublimeText3 英文版

    推薦:為Win版本,支援程式碼提示!

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    mPDF

    mPDF

    mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

    Dreamweaver Mac版

    Dreamweaver Mac版

    視覺化網頁開發工具