最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql中FIND_IN_SET函數(shù)的具體使用

 更新時(shí)間:2026年07月24日 09:45:34   作者:探索未知的自己  
本文深入解析FIND_IN_SET函數(shù)的用法、場(chǎng)景與性能陷阱,告訴你為什么它無(wú)法使用索引,并分享實(shí)用的優(yōu)化替代方案,幫你避開(kāi)全表掃描的坑,提升查詢效率

FIND_IN_SET 是 MySQL 的一個(gè)字符串處理函數(shù),用于在逗號(hào)分隔的字符串列表中查找指定值的位置。

一、函數(shù)語(yǔ)法

FIND_IN_SET(str, strlist)
參數(shù)說(shuō)明
str要查找的字符串
strlist逗號(hào)分隔的字符串列表(如 'A,B,C')

返回值:

  • 如果找到,返回 位置(從 1 開(kāi)始)
  • 如果沒(méi)找到,返回 0
  • 如果 str 或 strlist 為 NULL,返回 NULL

二、基本示例

SELECT FIND_IN_SET('B', 'A,B,C,D');   -- 返回 2
SELECT FIND_IN_SET('Z', 'A,B,C,D');   -- 返回 0
SELECT FIND_IN_SET(NULL, 'A,B,C,D');  -- 返回 NULL
SELECT FIND_IN_SET('B', NULL);        -- 返回 NULL
SELECT FIND_IN_SET('B', '');          -- 返回 0

三、常見(jiàn)使用場(chǎng)景

1. 判斷某個(gè)值是否在逗號(hào)分隔的字符串中

-- 查詢所屬系統(tǒng)包含 '1' 的記錄
SELECT * FROM vehicle 
WHERE FIND_IN_SET('1', belonging_system) > 0;

2. 按逗號(hào)分隔字符串排序

-- 按用戶指定的順序排序(如 3,1,2)
SELECT * FROM user 
ORDER BY FIND_IN_SET(id, '3,1,2');

3. 結(jié)合 COALESCE 處理 NULL

-- 如果參數(shù)為 NULL,查詢?nèi)浚环駝t按 IN 匹配
SELECT * FROM vehicle 
WHERE (?1 IS NULL OR FIND_IN_SET(?1, belonging_system) > 0);

4. 統(tǒng)計(jì)某個(gè)值出現(xiàn)的次數(shù)

-- 統(tǒng)計(jì) VIN 中包含 'L58' 的記錄數(shù)
SELECT COUNT(*) FROM vehicle 
WHERE FIND_IN_SET('L58', vin) > 0;

四、在你的場(chǎng)景中使用 FIND_IN_SET

場(chǎng)景:belonging_system 是逗號(hào)分隔的字符串

-- 查詢 belonging_system 包含 systemId 的所有記錄
SELECT * FROM vehicle 
WHERE FIND_IN_SET('1', belonging_system) > 0;

-- 結(jié)合參數(shù)判空
SELECT * FROM vehicle 
WHERE (?1 IS NULL OR FIND_IN_SET(?1, belonging_system) > 0);

JPA 原生查詢寫(xiě)法

@Query(value = "SELECT * FROM vehicle v " +
       "WHERE (COALESCE(?1, NULL) IS NULL OR FIND_IN_SET(?1, v.belonging_system) > 0)", 
       nativeQuery = true)
Page<Vehicle> findBySystemId(@Param("systemId") String systemId, Pageable pageable);

五、FIND_IN_SET vs IN

對(duì)比項(xiàng)FIND_IN_SETIN
適用場(chǎng)景字段是逗號(hào)分隔的字符串字段是單個(gè)值
用法FIND_IN_SET('A', column) > 0column IN ('A', 'B')
索引使用? 無(wú)法使用索引? 可以使用索引
性能全表掃描,數(shù)據(jù)量大時(shí)慢有索引時(shí)快
參數(shù)傳遞傳單個(gè)字符串需要傳多個(gè)值(集合)

核心區(qū)別:

  • IN 用于多個(gè)值的列表匹配
  • FIND_IN_SET 用于單個(gè)字段中存儲(chǔ)的逗號(hào)分隔字符串匹配

六、性能注意事項(xiàng)

?? FIND_IN_SET 無(wú)法使用索引,在數(shù)據(jù)量大時(shí)性能較差。

數(shù)據(jù)量性能表現(xiàn)
< 1 萬(wàn)條? 可以接受
1 萬(wàn) ~ 10 萬(wàn)?? 可能變慢
> 10 萬(wàn)? 嚴(yán)重性能問(wèn)題

優(yōu)化建議

  • 改用關(guān)聯(lián)表(推薦)

    • 將 belonging_system 從逗號(hào)分隔字符串改為多對(duì)多關(guān)聯(lián)表
    • 使用 IN 或 EXISTS 查詢,利用索引
  • 使用 JSON 數(shù)組(MySQL 5.7+)

    -- 存儲(chǔ)為 JSON 數(shù)組
    SELECT * FROM vehicle 
    WHERE JSON_CONTAINS(belonging_system, '"1"');
  • 使用全文索引

    ALTER TABLE vehicle ADD FULLTEXT(belonging_system);
    SELECT * FROM vehicle 
    WHERE MATCH(belonging_system) AGAINST('1');

七、完整示例

-- 1. 基本查找
SELECT FIND_IN_SET('2', '1,2,3,4');  -- 返回 2

-- 2. 在 WHERE 中使用
SELECT * FROM user WHERE FIND_IN_SET('admin', roles) &gt; 0;

-- 3. 結(jié)合 ORDER BY(按指定順序)
SELECT * FROM product 
WHERE id IN (3,1,2) 
ORDER BY FIND_IN_SET(id, '3,1,2');

-- 4. 結(jié)合 CASE
SELECT 
    name,
    CASE 
        WHEN FIND_IN_SET('admin', roles) &gt; 0 THEN '管理員'
        WHEN FIND_IN_SET('user', roles) &gt; 0 THEN '普通用戶'
        ELSE '未知'
    END AS role_name
FROM user;

八、總結(jié)

要點(diǎn)說(shuō)明
功能在逗號(hào)分隔的字符串中查找值的位置
返回值找到返回位置(1-based),沒(méi)找到返回 0
主要場(chǎng)景判斷值是否存在于逗號(hào)分隔字段中
優(yōu)點(diǎn)簡(jiǎn)單直觀,適合小數(shù)據(jù)量
缺點(diǎn)無(wú)法使用索引,大數(shù)據(jù)量時(shí)性能差
替代方案關(guān)聯(lián)表、JSON 數(shù)組、全文索引

建議:如果 belonging_system 經(jīng)常被查詢,建議改為多對(duì)多關(guān)聯(lián)表,徹底解決性能問(wèn)題。如果數(shù)據(jù)量?。?lt; 1 萬(wàn)),FIND_IN_SET 可以接受。

到此這篇關(guān)于Mysql中FIND_IN_SET函數(shù)的具體使用的文章就介紹到這了,更多相關(guān)Mysql FIND_IN_SET內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • M1芯片安裝mysql8.0數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟(圖文)

    M1芯片安裝mysql8.0數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟(圖文)

    這篇文章主要介紹了M1芯片安裝mysql8.0數(shù)據(jù)庫(kù)的實(shí)現(xiàn)實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 使用use index優(yōu)化sql查詢的詳細(xì)介紹

    使用use index優(yōu)化sql查詢的詳細(xì)介紹

    本篇文章是對(duì)使用use index優(yōu)化sql查詢進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL時(shí)間溢出原理、影響與解決方案

    MySQL時(shí)間溢出原理、影響與解決方案

    本文將手把手帶您了解mysql時(shí)間溢出原理、實(shí)戰(zhàn)影響與全面解決方案,所有代碼均通過(guò)dblens for mysql數(shù)據(jù)庫(kù)工具驗(yàn)證,推薦使用該工具進(jìn)行可視化數(shù)據(jù)庫(kù)管理和開(kāi)發(fā),感興趣的小伙伴跟著小編一起來(lái)看看吧
    2025-03-03
  • Mysql 分批加索引的詳細(xì)方法

    Mysql 分批加索引的詳細(xì)方法

    文章主要介紹了在生產(chǎn)環(huán)境中為千萬(wàn)級(jí)數(shù)據(jù)表分批次創(chuàng)建索引的策略和方法,包括使用臨時(shí)表、分區(qū)表、ONLINE選項(xiàng)、分批ALTER TABLE、pt-online-schema-change工具等,并提供了詳細(xì)的步驟和注意事項(xiàng),感興趣的朋友一起看看吧
    2024-12-12
  • 基于Mysql+JavaSwing的超市商品管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    基于Mysql+JavaSwing的超市商品管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    本項(xiàng)目是使用Java swing開(kāi)發(fā),可實(shí)現(xiàn)超市管理系統(tǒng)商品列表信息查詢、添加商品信息和修改商品管理以及刪除商品信息和安裝商品信息查詢等功能。界面設(shè)計(jì)和功能比較簡(jiǎn)單基礎(chǔ)、適合作為Java課設(shè)設(shè)計(jì)以及學(xué)習(xí)技術(shù)使用,需要的朋友可以參考一下
    2021-09-09
  • MySQL之初始化數(shù)據(jù)詳解

    MySQL之初始化數(shù)據(jù)詳解

    本文介紹了MySQL命令行的基本操作,包括列出數(shù)據(jù)庫(kù)、創(chuàng)建數(shù)據(jù)庫(kù)、使用數(shù)據(jù)庫(kù)、查看表、刪除數(shù)據(jù)庫(kù)、退出MySQL等,還詳細(xì)介紹了數(shù)據(jù)庫(kù)表的結(jié)構(gòu)和屬性,以及如何創(chuàng)建和初始化測(cè)試數(shù)據(jù)
    2025-01-01
  • Django創(chuàng)建項(xiàng)目+連通mysql的操作方法

    Django創(chuàng)建項(xiàng)目+連通mysql的操作方法

    這篇文章主要介紹了Django創(chuàng)建項(xiàng)目+連通mysql的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • MySQL MHA 高可用集群搭建過(guò)程詳解

    MySQL MHA 高可用集群搭建過(guò)程詳解

    MHA 是一套優(yōu)秀的、開(kāi)源的 MySQL 高可用性解決方案,它的核心目標(biāo)是在 MySQL 主從復(fù)制環(huán)境中,實(shí)現(xiàn)主庫(kù)故障時(shí)的自動(dòng)故障轉(zhuǎn)移和快速切換,盡可能保證數(shù)據(jù)庫(kù)服務(wù)的連續(xù)性,這篇文章主要介紹了MySQL MHA 高可用集群搭建指南,需要的朋友可以參考下
    2025-10-10
  • MySQL 互為主備的實(shí)現(xiàn)教程

    MySQL 互為主備的實(shí)現(xiàn)教程

    本文主要介紹了MySQL 互為主備的實(shí)現(xiàn)教程,包括正確編輯my.ini配置文件、確保數(shù)據(jù)庫(kù)操作前置條件完成以及避免在關(guān)鍵步驟中修改數(shù)據(jù)庫(kù)數(shù)據(jù),以確保配置成功
    2026-06-06
  • MYSQL 沒(méi)有完全卸載將導(dǎo)致其安裝不成功

    MYSQL 沒(méi)有完全卸載將導(dǎo)致其安裝不成功

    安裝MYSQL不成功,一般是因?yàn)榉?wù)器可能安裝過(guò)MYSQL而沒(méi)有完全卸載。
    2009-06-06

最新評(píng)論

泌阳县| 新绛县| 古交市| 神农架林区| 虞城县| 潍坊市| 桐庐县| 治县。| 大悟县| 惠水县| 张家港市| 凤凰县| 金坛市| 韶山市| 九江县| 德昌县| 榆树市| 宿松县| 邹城市| 玉林市| 康定县| 崇礼县| 库伦旗| 平遥县| 六枝特区| 万载县| 沐川县| 临武县| 乐都县| 时尚| 莒南县| 乌恰县| 丘北县| 土默特右旗| 扎鲁特旗| 白水县| 儋州市| 东城区| 大关县| 沂水县| 会同县|