SQL:多列匹配(Multiple-column Matching)

目錄

基礎概念

?應用場景詳解?

1. 多列等值匹配?

2. 多列 IN 匹配(集合匹配)

3. 多列 JOIN 匹配(復合鍵連接)

4. 多列匹配 + 子查詢

5. 多列匹配 + EXISTS

6. 多列匹配 + UNION(組合數據源)

7. 多列匹配 + 索引優化

性能優化與注意事項


在 MySQL 中,多列匹配(Multiple-column Matching)是指在查詢過程中同時對多列進行組合匹配的操作。它通常出現在 WHERE 子句、IN 子句、JOIN 條件或索引使用場景中,具有重要的性能和邏輯意義。

基礎概念

多列匹配指的是將多個列組合在一起參與條件判斷,形式如下:

SELECT * FROM table
WHERE (col1, col2) = ('value1', 'value2');

?這種寫法表示:只有當 col1 = 'value1'col2 = 'value2' 同時成立時,才匹配成功。

?應用場景詳解?

1. 多列等值匹配?

說明:
當數據表有復合主鍵或唯一約束字段組合時,我們經常使用多列匹配來確保查詢唯一一條數據。

示例:

SELECT * FROM enrollment
WHERE (student_id, course_id) = (1001, 3002);

?用于查找 student_id 為 1001,course_id 為 3002 的具體記錄。高效、簡潔,且比 AND 更具有表達力。

2. 多列 IN 匹配(集合匹配)

說明:
當我們需要查找多組組合數據時,可以使用多列 IN ((v1,v2), (v3,v4)) 語法。

示例:

SELECT * FROM enrollment
WHERE (student_id, course_id) IN ((1001, 3002), (1002, 3003), (1003, 3004));

?表示查找這三組組合中的記錄。適用于批量查找、批量更新等場景。

3. 多列 JOIN 匹配(復合鍵連接)

說明:
JOIN 連接表時,如果兩個表使用多個字段作為連接鍵,應使用多列匹配,代碼清晰、性能高。

示例:

SELECT *
FROM orders o
JOIN shipments s
ON (o.order_id, o.customer_id) = (s.order_id, s.customer_id);

對于有聯合外鍵的表(order_id + customer_id),這種連接方式邏輯更準確。

4. 多列匹配 + 子查詢

說明:
在需要從另一張表中獲取一組組合值并在主表中匹配時,子查詢返回多列進行匹配非常實用。

示例 1:子查詢返回多個列,主查詢多列匹配?

SELECT * FROM orders o
WHERE (o.customer_id, o.product_id) IN (SELECT customer_id, product_idFROM popular_productsWHERE year = 2024
);

獲取下單用戶中,在 2024 年最熱門產品中出現過的所有訂單。子查詢返回的是一組 customer_id + product_id 的組合。

示例 2:帶子查詢的 NOT IN?

SELECT * FROM orders o
WHERE (o.customer_id, o.product_id) NOT IN (SELECT customer_id, product_idFROM blacklist_products
);

?排除所有在黑名單中的商品組合。

5. 多列匹配 + EXISTS

說明:
比多列 IN 更推薦用于大型子查詢,尤其在子表行數多時。

SELECT * FROM orders o
WHERE EXISTS (SELECT 1 FROM popular_products pWHERE o.customer_id = p.customer_id AND o.product_id = p.product_id
);

EXISTS 利用索引更容易走子查詢優化路徑,適合復雜或數據量大的情況。

6. 多列匹配 + UNION(組合數據源)

說明:
有時候我們需要從多個子集合中組合多列條件,再在主表中匹配。

SELECT * FROM orders o
WHERE (o.customer_id, o.product_id) IN (SELECT customer_id, product_id FROM vip_ordersUNIONSELECT customer_id, product_id FROM recent_orders
);

多來源組合式過濾,避免復雜 OR 查詢。

7. 多列匹配 + 索引優化

說明:
MySQL 支持為多個列創建復合索引,使多列匹配執行更高效。

CREATE INDEX idx_customer_product ON orders (customer_id, product_id);

當你執行 (customer_id, product_id) = (...),這會直接命中復合索引,大幅提升性能。

?

性能優化與注意事項

項目建議/注意
?使用復合索引多列匹配配合復合索引使用效果最佳
?匹配順序一致WHERE 中列順序必須和索引順序一致
IN 數量過多元組太多(上千個)會造成執行效率下降
?使用 EXISTS 替代 IN在子表數據量大時更優
?不支持模糊匹配不能使用 (col1, col2) LIKE (...)
?使用 EXPLAIN 分析查看查詢是否正確命中索引
  • 使用復合索引:對多列使用索引組合查詢效率遠高于多個單列索引。

  • 避免列順序錯誤:WHERE 中多列順序需匹配索引順序。

  • 避免使用過多元組 IN 查詢:IN ((a,b), (c,d)) 中元組過多時,會影響性能。

  • 搭配 EXPLAIN 使用:分析查詢是否命中索引。

EXPLAIN SELECT * FROM enrollment
WHERE (student_id, course_id) = (101, 203);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80560.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80560.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80560.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于DeepSeek的智能客服系統實踐與創新

引言:AI大模型重塑客戶服務新范式 近年來,AI大模型技術的突破性進展正在深刻改變傳統客戶服務模式。作為國內領先的AI企業,DeepSeek憑借其創新的算法架構(如MoE混合專家模型、動態學習率調度器)和極致的成本效益(僅為同類模型成本的1/20),在自然語言理解、情感分析、多…

SGLang和vllm比有什么優勢?

環境: SGLang vllm 問題描述: SGLang和vllm比有什么優勢? 解決方案: SGLang和vLLM都是在大語言模型(LLM)推理和部署領域的開源項目或框架,它們各自有不同的設計目標和優勢。下面我綜合目前…

三、Hive DDL數據庫操作

在 Apache Hive 中,數據庫 (Database),有時也被稱為模式 (Schema),是組織和管理 表及其他對象的基本命名空間單元。熟練掌握數據庫層面的數據定義語言 (DDL) 操作,是構建清晰、有序的 Hive 數據倉庫的第一步。本篇筆記將詳細梳理 …

Redis(2):Redis + Lua為什么可以實現原子性

Redis 作為一款高性能的鍵值對存儲數據庫,與 Lua 腳本相結合,為實現原子性操作提供了強大的解決方案,本文將深入探討 Redis Lua 實現原子性的相關知識 原子性概念的厘清 在探討 Redis Lua 的原子性之前,我們需要明確原子性的概念…

科普:極簡的AI亂戰江湖

本文無圖。 大模型 ?2022年2月,?文生圖應用的鼻祖Midjourney上線。 ?2022年8月,?開源版的Midjourney,也就是Stable Diffusion上線。 2022年11月30日?,OpenAI正式發布ChatGPT-3.5。 此后,不斷有【大模型】面世&…

CSS- 4.5 css + div 布局 簡易網易云音樂 官網布置實例

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。 HTML系列文章 已經收錄在前端專欄,有需要的寶寶們可以點擊前端專欄查看! 點…

【滑動窗口】LeetCode 1004題解 | 最大連續1的個數 Ⅲ

最大連續1的個數 Ⅲ 一、題目鏈接二、題目三、題目解析四、算法原理解法一:暴力枚舉 zero計數器解法二:滑動窗口 五、編寫代碼六、時空復雜度 一、題目鏈接 最大連續1的個數 Ⅲ 二、題目 三、題目解析 注意題目中說的是最多k次,在一個數組…

PyTorch音頻處理技術及應用研究:從特征提取到相似度分析

文章目錄 音頻處理技術及應用音頻處理技術音視頻摘要技術音頻識別及應用 梅爾頻率倒譜系數音頻特征爾頻率倒譜系數簡介及參數提取過程音頻處理快速傅里葉變換(FFT)能量譜處理離散余弦轉換 練習案例:音頻建模加載音頻數據源波形變換的類型繪制波形頻譜圖波形Mu-Law 編…

鴻蒙OSUniApp 實現的語音輸入與語音識別功能#三方框架 #Uniapp

UniApp 實現的語音輸入與語音識別功能 最近在開發跨平臺應用時,客戶要求添加語音輸入功能以提升用戶體驗。經過一番調研和實踐,我成功在UniApp項目中實現了語音輸入與識別功能,現將過程和方法分享出來,希望對有類似需求的開發者有…

2025年衛星遙感行業最新發展趨勢深度分析

一、國內發展趨勢:政策引領與技術突破雙輪驅動 (一)政策體系持續完善,頂層設計深化行業發展 國家級戰略與標準體系構建 中國政府將衛星遙感產業納入“十四五”規劃核心戰略,明確構建“通導遙”一體化空間基礎設施。20…

SIP協議棧--osip源碼梳理

文章目錄 osiposip主體結構體code main函數 狀態機轉化結構體code狀態轉換 sip事務結構體code osip_dialog結構體code 創建并發送200 OK響應 osip_message結構體code osip_eventcode 打印接收到的SIP消息 osip OSIP(Open Source Implementation of SIP)…

Linux之Yum源與Nginx服務篇

1.Yum源知識理論總結概括 Yum源概述 Yum 源 即軟件倉庫的標識,里面承載著軟件包集合 Yum源組成 包含模塊 【OS】、【everything】、【EPOL】、【debuginfo】、【source】、【update-source】 【os】:簡稱operator system 它內部包含操作系統的核心組件&#x…

從單體架構到微服務:架構演進之路

引言:當“大貨車”遇上“集裝箱運輸” 在軟件開發領域,單體架構曾像一輛載滿貨物的大貨車,將所有功能打包在一個應用中。但隨著業務復雜度飆升,這輛“大貨車”逐漸陷入泥潭:啟動慢如蝸牛、故障波及全局、升級如履薄冰……

AM32電調學習解讀九:ESC上電啟動關閉全流程波形分析

這是第九篇,前面的文章把各個模塊的實現都介紹了一輪,本章是從運行的角度結合波形圖,把整個流程走一遍。 先看下一運行的配置,我把一些配置關閉了,這樣跑起來會好分析一些,不同配置跑起來效果會有差異。使用…

全球寵物經濟新周期下的亞馬遜跨境采購策略革新——寵物用品賽道成本優化三維路徑

在全球"孤獨經濟"與"銀發經濟"雙輪驅動下,寵物用品市場正經歷結構性增長。Euromonitor數據顯示,2023年全球市場規模突破1520億美元,其中中國供應鏈貢獻度達38%,跨境電商出口增速連續三年超25%。在亞馬遜流量紅…

reshape/view/permute的原理

在pytorch中,Tensor的存儲是行主序的,也就是意味著最后一個維度的元素的存儲時連續的,reshape和view并不改變元素存儲的內存,僅僅改變訪問的間隔,下面舉例說明; 比如一個23的Tensor在內存中的存儲是連續的&…

upload-labs靶場通關詳解:第11關

一、分析源代碼 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array("php","php5","php4","php3","php2","html","htm","phtml"…

L1-7 最短字母串【保姆級詳細講解】

請你設計一個程序,該程序接受起始字母和目標字母作為輸入,通過在字母表中向前或向后移動來計算兩個給定字母之間的最短路徑。然后,程序會沿著最短路徑打印出從起始字母到目標字母的所有字母。例如,如果輸入“c”和“k”作為起始字…

項目QT+ffmpeg+rtsp(三)——延遲巨低的項目+雙屏顯示

文章目錄 前言雙屏顯示widget.cppwidget.h前言 對于復現情況,分為兩種情況 第一種,對于我而言,是直接解壓后,就能直接運行了 第二種,對于師兄而言,需要你構建debug后,會產生這個文件夾,執行的時候,地址應該在這,我猜的,這里面沒有dll,exe程序就找不到dll這些庫,你…

ansible進階06

復雜的循環結構 循環基礎 [studentworktest myansible]$ cat users.yml --- - name: create usershosts: serveratasks:- name: create some usersuser:name: "{{item}}"password: "{{123456|password_hash(sha512)}}"state: presentloop:- zhangsan- li…