亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL中in和exists區(qū)別詳解

 更新時間:2021年06月03日 10:47:12   作者:老周聊架構  
最近在寫SQL語句時,對選擇IN 還是Exists猶豫不決,所以就上網查詢了一下資料,本文就詳細的介紹了兩個方法的區(qū)別,感興趣的可以了解一下

一、提前準備

為了大家學習方便,我在這里面建立兩張表并為其添加一些數(shù)據。

一張水果表,一張供應商表。

水果表 fruits表

f_id f_name f_price
a1 apple 5
a2 appricot 2
b1 blackberry 10
b2 berry 8
c1 cocount 9

供應商表 suppliers表

s_id s_name
101 天虹
102 沃爾瑪
103 家樂福
104 華潤萬家

我們將用這兩張表做演示。

二、什么是exists

exists關鍵字后面的參數(shù)是一個任意的子查詢,系統(tǒng)對子查詢進行運算以判斷它是否返回行,如果至少返回一行,那么exists的結果為true ,此時外層的查詢語句將進行查詢;如果子查詢沒有返回任何行,那么exists的結果為false,此時外層語句將不進行查詢。

需要注意的是,當我們的子查詢?yōu)?SELECT NULL 時,MYSQL仍然認為它是True。

在這里插入圖片描述

在這里插入圖片描述

三、什么是in

in 關鍵字進行子查詢時,內層查詢語句僅僅返回一個數(shù)據列,這個數(shù)據列的值將提供給外層查詢語句進行比較操作。

為了測試in 關鍵字,我在水果表中加了s_id一列

水果表 fruits表

f_id f_name f_price s_id
a1 apple 5 101
a2 appricot 2 103
b1 blackberry 10 102
b2 berry 8 104
c1 cocount 9 103

在這里插入圖片描述

四、exists和in

in和exists到底有啥區(qū)別那,要什么時候用in,什么時候用exists?

我們先記住口訣再說細節(jié)!“外層查詢表小于子查詢表,則用exists,外層查詢表大于子查詢表,則用in,如果外層和子查詢表差不多,則愛用哪個用哪個。

我想你已經看出來了,當fruits表數(shù)據很大的時候不適合用in,因為它最多會將fruits表數(shù)據全部遍歷一次。

如:suppliers表有10000條記錄,fruits表有1000000條記錄,那么最多有可能遍歷10000*1000000次,效率很差。

再如:suppliers表有10000條記錄,fruits表有100條記錄,那么最多有可能遍歷10000*100次,遍歷次數(shù)大大減少,效率大大提升。

但是:suppliers表有10000條記錄,fruits表有100條記錄,那么exists()還是執(zhí)行10000次,還不如使用in()遍歷10000*100次,因為in()是在內存里遍歷,而exists()需要查詢數(shù)據庫,我們都知道查詢數(shù)據庫所消耗的性能更高,而內存比較很快。

因此我們只需要記住口訣:“外層查詢表小于子查詢表,則用exists,外層查詢表大于子查詢表,則用in,如果外層和子查詢表差不多,則愛用哪個用哪個?!?/p>

五、not exists和not in

在這里插入圖片描述

和exists一樣,用到了suppliers上的id索引,exists()執(zhí)行次數(shù)為fruits.length,不緩存exists()的結果集。

在這里插入圖片描述

因為not in實質上等于!= and != ···,因為!=不會使用索引,故not in不會使用索引。

為啥not in不會使用索引?

我們假設有100萬數(shù)據,s_id只有0和1兩個值,利用索引我們要先讀索引文件,然后二分查找,找到對應的數(shù)據磁盤指針,再根據讀到的指針在磁盤上對應的數(shù)據,影響結果集50萬,這種情況,和直接全表掃描哪個快顯而易見。

如果你s_id字段是一個unique,就會用到索引。

如果你一定要用索引,可以用force index,不過效率不會有改善一般還會更慢就是了。

合理使用索引,Cardinality是一個重要指標,太小的話跟沒建沒區(qū)別,還浪費空間。

因此,不管suppliers和fruits大小如何,均使用not exists效率會更高。

到此這篇關于MySQL中in和exists區(qū)別詳解的文章就介紹到這了,更多相關MySQL in和exists區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql5.6.zip格式壓縮版安裝圖文教程

    mysql5.6.zip格式壓縮版安裝圖文教程

    這篇文章主要為大家詳細介紹了mysql5.6.zip格式壓縮版安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 使用SQL語句概述-DDL-數(shù)據類型

    使用SQL語句概述-DDL-數(shù)據類型

    這篇文章主要介紹了使用SQL語句概述-DDL-數(shù)據類型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • mysql臨時表用法分析【查詢結果可存在臨時表中】

    mysql臨時表用法分析【查詢結果可存在臨時表中】

    這篇文章主要介紹了mysql臨時表用法,結合實例形式分析了MySQL將查詢結果存儲在臨時表中的相關操作技巧,需要的朋友可以參考下
    2019-08-08
  • MySQL基于GTID主從搭建

    MySQL基于GTID主從搭建

    這篇文章主要介紹了MySQL基于GTID主從搭建,文章首先通過xtarbackup來同步數(shù)據展開文章內容詳情,感興趣的小伙伴可以參考一下
    2022-08-08
  • MYSQL索引無效和索引有效的詳細介紹

    MYSQL索引無效和索引有效的詳細介紹

    MYSQL索引無效和索引有效的詳細介紹,需要的朋友可以參考一下
    2013-05-05
  • MySQL插入數(shù)據時插入無效列的解決方法

    MySQL插入數(shù)據時插入無效列的解決方法

    MySQL插入數(shù)據時插入無效的列,解決方法是在插入時,給字符串類型的字段值加上雙引號
    2014-07-07
  • MySQL復制之GTID復制的具體使用

    MySQL復制之GTID復制的具體使用

    從MySQL 5.6.5開始新增了一種基于GTID的復制方式,本文主要介紹了MySQL復制之GTID復制的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • MySQL系列之六 用戶與授權

    MySQL系列之六 用戶與授權

    做為Mysql數(shù)據庫管理員管理用戶賬戶,是一件很重要的事,指出哪個用戶可以連接服務器,從哪里連接,連接后能做什么,這篇文章主要介紹了MySQL用戶與授權的相關資料,需要的朋友可以參考下
    2021-07-07
  • MySQL基礎學習之字符集的應用

    MySQL基礎學習之字符集的應用

    這篇文章主要為大家詳細介紹了MySQL中字符集的相關使用,例如字符集的查詢與修改和比較規(guī)則等,文中的示例代碼講解詳細,需要的可以參考一下
    2023-05-05
  • MySQL性能壓力基準測試工具sysbench的使用簡介

    MySQL性能壓力基準測試工具sysbench的使用簡介

    這篇文章主要介紹了MySQL性能壓力基準測試工具sysbench的使用簡介,幫助大家更好的理解和學習使用MySQL,感興趣的朋友可以了解下
    2021-04-04

最新評論