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

Mysql中FIND_IN_SET()和IN區(qū)別簡(jiǎn)析

 更新時(shí)間:2017年10月13日 14:41:50   作者:JavaDynamic  
這篇文章主要介紹了Mysql中FIND_IN_SET()和IN區(qū)別簡(jiǎn)析,設(shè)計(jì)實(shí)例代碼,具有一定參考價(jià)值。需要的朋友可以了解。

前段時(shí)間項(xiàng)目中使用到Mysql的FIND_IN_SET函數(shù),感覺挺好用的。過一段時(shí)間,老大找到我說,這個(gè)需要改為IN,哈哈,只能改了,原因會(huì)在下面分析到!

弄個(gè)測(cè)試表來說說兩者的區(qū)別,測(cè)試數(shù)據(jù)直接在問答區(qū)copy一份,能說明問題就行,哈哈,如果侵犯您的版權(quán)還請(qǐng)見諒,互聯(lián)網(wǎng)嗎,就需要分享!

測(cè)試代碼:  
CREATE TABLE `test` ( 
 `id` int(8) NOT NULL auto_increment, 
 `name` varchar(255) NOT NULL, 
 `list` varchar(255) NOT NULL, 
 PRIMARY KEY (`id`) 
) 
INSERT INTO `test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin'); 
INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin'); 
INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu'); 
test1:sql = select * from `test` where 'daodao' IN (`list`); 
得到結(jié)果空值. 
test2:sql = select * from `test` where FIND_IN_SET('daodao',`list`); 
得到三條數(shù)據(jù)。 

拿上面的實(shí)驗(yàn)數(shù)據(jù)說話,test1得到的結(jié)果為空,為什么呢?因?yàn)?,mysql中In是比較等不等,此處‘list'是表中的一個(gè)字段,也就是變量,除非它的值剛好和name的值一樣,否則返回的結(jié)果都為空。拿test1來說,也即把‘daodao'改為‘daodao,xiaohu,xiaoqin'才會(huì)匹配到第一條記。

test2返回三條數(shù)據(jù),可能是我們剛好需要的。mysql中FIND_IN_SET函數(shù)用來比較是不是包含,不管‘list'字段是變量或給定的字符串常量都能很好的工作。MySQL中原型為:FIND_IN_SET(str,strlist)。 假如字符串str 在由N 子鏈組成的字符串列表strlist 中,則返回值的范圍在 1 到 N 之間。

一個(gè)字符串列表就是一個(gè)由一些被‘,'符號(hào)分開的子鏈組成的字符串。如果第一個(gè)參數(shù)是一個(gè)常數(shù)字符串,而第二個(gè)是type SET列,則   FIND_IN_SET() 函數(shù)被優(yōu)化,使用比特計(jì)算。 如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個(gè)參數(shù)為NULL,則返回值為 NULL。這個(gè)函數(shù)在第一個(gè)參數(shù)包含一個(gè)逗號(hào)(‘,')時(shí)將無法正常運(yùn)行。str也可以是變量,比如表中的一個(gè)字段。

當(dāng)然,這不是我們項(xiàng)目中需要將FIND_IN_SET替換為IN的原因,因?yàn)樵谖覀冺?xiàng)目中兩者都可以實(shí)現(xiàn)功能。只是IN比FIND_IN_SET性能高。我們要查詢的字段是主鍵,使用IN時(shí)會(huì)使用索引,只會(huì)查詢表中部分?jǐn)?shù)據(jù)。FIND_IN_SET則會(huì)查詢表中全部數(shù)據(jù),由于數(shù)據(jù)量比較大,性能肯定不高,所以替換為IN。想看查詢部分還是全部,可以使用EXPLAIN即解釋功能查看,如果是部分則type為range(范圍),全部則type為ALL(全部),還有個(gè)type是const,常量級(jí)的,呵呵。。。

最佳實(shí)踐:

1、如果待查詢的條件是常量那就使用IN,是變量則使用FIND_IN_SET,可以使用索引的,貌似,哈哈。

2、如果使用IN和FIND_IN_SET都能滿足條件,則最好使用IN,理由同上,特別是查詢字段為主鍵時(shí)或有索引時(shí)。

3、如果使用IN不能滿足功能需求,那只能使用FIND_IN_SET了,哈哈,有時(shí)候說不定IN中條件加個(gè)%號(hào)也可以解決問題,加個(gè)%號(hào)IN就不只是比較是否相等了!

總結(jié)

以上就是本文關(guān)于Mysql中FIND_IN_SET()和IN區(qū)別簡(jiǎn)析的全部?jī)?nèi)容,感興趣的朋友可以參閱:MySQL數(shù)據(jù)庫(kù)表分區(qū)注意事項(xiàng)大全【推薦】、幾個(gè)比較重要的MySQL變量、sql和MySQL的語(yǔ)句執(zhí)行順序分析等,希望對(duì)大家有所幫助。歡迎大家留言交流討論,如有不足之處,小編會(huì)及時(shí)改正補(bǔ)充。

相關(guān)文章

  • Ubuntu18.04安裝mysql5.7.23的教程

    Ubuntu18.04安裝mysql5.7.23的教程

    這篇文章主要為大家詳細(xì)介紹了Ubuntu18.04安裝mysql5.7.23的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • MySQL函數(shù)Locate的使用詳解

    MySQL函數(shù)Locate的使用詳解

    本文主要介紹了MySQL函數(shù)Locate的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • MySQL千萬不要這樣寫update語(yǔ)句

    MySQL千萬不要這樣寫update語(yǔ)句

    MySQL中update語(yǔ)句用于更新表中的現(xiàn)有數(shù)據(jù),亦可用UPDATE語(yǔ)句來更改表中單個(gè)行,一組行或所有行的列值,這篇文章主要給大家介紹了關(guān)于MySQL千萬不要這樣寫update語(yǔ)句的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • mysql中#{}和${}的區(qū)別詳解

    mysql中#{}和${}的區(qū)別詳解

    本文主要介紹了mysql中#{}和${}的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • CentOS8下MySQL 8.0安裝部署的方法

    CentOS8下MySQL 8.0安裝部署的方法

    這篇文章主要介紹了CentOS 8下 MySQL 8.0 安裝部署的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MySQL數(shù)據(jù)庫(kù)全量備份+增量備份的實(shí)現(xiàn)

    MySQL數(shù)據(jù)庫(kù)全量備份+增量備份的實(shí)現(xiàn)

    本文介紹了通過全量備份和增量備份實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)的安全,并通過cron定時(shí)任務(wù)自動(dòng)進(jìn)行備份,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • mysql8.0?.ibd文件恢復(fù)表結(jié)構(gòu)的實(shí)現(xiàn)

    mysql8.0?.ibd文件恢復(fù)表結(jié)構(gòu)的實(shí)現(xiàn)

    本文主要介紹了mysql8.0?.ibd文件恢復(fù)表結(jié)構(gòu)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • MySQL定期整理磁盤碎片的方法實(shí)現(xiàn)

    MySQL定期整理磁盤碎片的方法實(shí)現(xiàn)

    磁盤碎片是指文件在磁盤上分散存儲(chǔ)的情況,這可能導(dǎo)致磁盤讀寫速度下降、空間浪費(fèi)等問題,本文主要介紹了MySQL定期整理磁盤碎片的方法實(shí)現(xiàn),感興趣的可以了解一下
    2024-02-02
  • mysql字符集和校對(duì)規(guī)則(Mysql校對(duì)集)

    mysql字符集和校對(duì)規(guī)則(Mysql校對(duì)集)

    字符集的概念大家都清楚,校對(duì)規(guī)則很多人不了解,一般數(shù)據(jù)庫(kù)開發(fā)中也用不到這個(gè)概念,mysql在這方便貌似很先進(jìn),大概介紹一下
    2012-07-07
  • mysql事務(wù)處理用法與實(shí)例代碼詳解

    mysql事務(wù)處理用法與實(shí)例代碼詳解

    這篇文章主要介紹了mysql事務(wù)處理用法與實(shí)例代碼詳解,詳細(xì)的介紹了事物的特性和用法并實(shí)現(xiàn)php和mysql事務(wù)處理例子,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-12-12

最新評(píng)論

南通市| 江门市| 临漳县| 泸西县| 神农架林区| 安达市| 城口县| 逊克县| 富顺县| 阿拉善右旗| 合肥市| 博爱县| 沅陵县| 土默特右旗| 高唐县| 亚东县| 万荣县| 玛多县| 修武县| 湄潭县| 轮台县| 万州区| 枞阳县| 德江县| 天全县| 大足县| 万宁市| 定远县| 靖宇县| 随州市| 栾川县| 九龙坡区| 林芝县| 宁强县| 电白县| 定兴县| 东阳市| 桂东县| 罗江县| 普陀区| 文登市|