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 後的集合所進行的篩選。
綜上: 先 執行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'
四、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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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