目錄
join查詢與多次查詢比較
查詢語句join、on、where執行順序
一、典型SELECT語句完整的執行順序
#11)使用order by對結果集進行排序。
二、from
四、on 条件与where 条件
五、join 流程
首頁 資料庫 mysql教程 mysql的join查詢和多次查詢方法是什麼

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

Jun 02, 2023 pm 04:29 PM
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

    熱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

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

    熱門文章

    <🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    北端:融合系統,解釋
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    熱門話題

    Java教學
    1665
    14
    CakePHP 教程
    1423
    52
    Laravel 教程
    1321
    25
    PHP教程
    1269
    29
    C# 教程
    1249
    24
    laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

    Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

    MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

    MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

    MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

    MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

    解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

    在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

    laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

    文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

    解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 Apr 18, 2025 am 08:42 AM

    在使用Thelia開發電商網站時,我遇到了一個棘手的問題:MySQL模式設置不當,導致某些功能無法正常運行。經過一番探索,我找到了一個名為TheliaMySQLModesChecker的模塊,它能夠自動修復Thelia所需的MySQL模式,徹底解決了我的困擾。

    MySQL:結構化數據和關係數據庫 MySQL:結構化數據和關係數據庫 Apr 18, 2025 am 12:22 AM

    MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

    MySQL:解釋的關鍵功能和功能 MySQL:解釋的關鍵功能和功能 Apr 18, 2025 am 12:17 AM

    MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

    See all articles