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

mysql中關(guān)于between和in的區(qū)別

 更新時間:2023年07月28日 10:21:48   作者:兩菜一湯、  
這篇文章主要介紹了mysql中關(guān)于between和in的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mysql中between和in的區(qū)別

下面兩條語句有什么區(qū)別,為什么都提倡使用范圍查詢 ?

select * from T where k in(1,2,3,4,5)
select * from T where k between 1 and 5

其實between和in這兩個關(guān)鍵字應(yīng)用的場景重合度并不高,但是我們可以通過思考這么一個問題,來理清這兩者執(zhí)行的執(zhí)行過程和邏輯。

要回答這個問題就需要先了解索引的數(shù)據(jù)結(jié)構(gòu),以及mysql索引利用b+樹執(zhí)行查詢的執(zhí)行過程,這里先默認大家具備了這個條件。

先區(qū)分下可能的情況。

第一個是k字段是主鍵,第二個是k字段是二級索引,第三種情況是k是普通字段。

另外,我們需要搞清楚in關(guān)鍵字和between兩種查詢方式在執(zhí)行的時候的不同之處;

  • in關(guān)鍵字其實是等值查詢的合并,將多個等值查詢合并成一個,減少查詢和返回次數(shù);
  • between查詢是典型的范圍查詢,在命中索引的情況下,會直接在查詢首個符合條件的數(shù)據(jù),然后根據(jù)指針一次獲取下一個葉子節(jié)點數(shù)據(jù)進行比較直到查詢到不符合條件的數(shù)據(jù)為止。
  • 現(xiàn)在我們再來對三種情況進行梳理,

k是主鍵索引和二級索引的情況是相似的,唯一的區(qū)別就是二級索引的話可能需要回表,回表不是這次討論的重點,所以我們把這兩種情況合并到一起說;

in 條件實際查詢的時候是多次搜索索引樹,而 between 條件只需要執(zhí)行一次搜索樹的查詢就可以獲得結(jié)果,本題為例,加入索引的底層實現(xiàn)結(jié)構(gòu)使用的是b+樹,使用關(guān)鍵字 in 要樹搜素5次,也就是做5次等值查詢;而 bewteen 基于b+樹的范圍查詢邏輯,當找到第一個滿足條件的葉子節(jié)點后,根據(jù)當前葉子節(jié)點指向的下一個葉子節(jié)點繼續(xù)查詢,直到查到不滿足條件的葉子節(jié)點,所以只需要樹搜索一次。

而對于k不是索引的情況,in條件相當于執(zhí)行了多次的全文遍歷,而between其實也是全文遍歷,都不是一個好的方式。

mysql條件查詢語句between and和in的效率比較

工作需要,寫按sensor_uuid在某范圍查詢的語句:

1.

select * from xz_sensor_data where sensor_time>='2019-03-28 00:00:00.000' and sensor_time<='2019-03-28 08:00:00.000' and sensor_uuid in('20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','201901','201902','201903','201904','201905','201906','201907','201908','201909','201910','201911','201912','201913') ?order by sensor_time asc

2.

select * from xz_sensor_data where sensor_time>='2019-03-28 00:00:00.000' and sensor_time<='2019-03-28 08:00:00.000' and (sensor_uuid ?between '19' and '36' or sensor_uuid between '201900' and '201914' )

發(fā)現(xiàn)第二條執(zhí)行效率高。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL按常規(guī)排序、自定義排序和按中文拼音字母排序的方法

    MySQL按常規(guī)排序、自定義排序和按中文拼音字母排序的方法

    MySQL常規(guī)排序、自定義排序和按中文拼音字母排序,在實際的SQL編寫時,我們有時候需要對條件集合進行排序。下面給出3種比較常用的排序方式,一起看看吧
    2017-04-04
  • MySQL中NULL對索引的影響深入講解

    MySQL中NULL對索引的影響深入講解

    這篇文章主要給大家介紹了關(guān)于MySQL中NULL對索引的影響的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 淺談MySQL中的六種日志

    淺談MySQL中的六種日志

    MySQL中存在著6種日志,本文是對MySQL日志文件的概念及基本使用介紹,不涉及底層內(nèi)容,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • MySQL邏輯備份into?outfile

    MySQL邏輯備份into?outfile

    這篇文章主要介紹了MySQL?備份之?into?outfile,文章圍繞主題展開詳細內(nèi)容介紹,具有一定的參考價值需要的小伙伴可以參考一下
    2022-05-05
  • MySQL安裝后不能用是什么情況該如何解決

    MySQL安裝后不能用是什么情況該如何解決

    之前安裝過MYSQL好像不用手動啟動服務(wù),具體也忘記了,但我上回給公司安裝的那個是要手動安裝服務(wù)的,如果mysql剛剛安裝不能用,可能是服務(wù)沒有安裝
    2014-03-03
  • MySQL?EXPLAIN中的key_len索引使用實戰(zhàn)解析

    MySQL?EXPLAIN中的key_len索引使用實戰(zhàn)解析

    在MySQL執(zhí)行計劃中,key_len表示查詢實際使用索引的字節(jié)長度,今天通過本文給大家介紹MySQL?EXPLAIN中的key_len索引使用實戰(zhàn)解析,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • MySQL 5.7.17 免安裝版本的安裝配置

    MySQL 5.7.17 免安裝版本的安裝配置

    這篇文章主要為大家詳細介紹了MySQL 5.7.17 免安裝版本的安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SQL算術(shù)運算符之加法、減法、乘法、除法和取模的用法例子

    SQL算術(shù)運算符之加法、減法、乘法、除法和取模的用法例子

    算術(shù)運算符主要用于數(shù)學(xué)運算,其可以連接運算符前后的兩個數(shù)值或表達式,對數(shù)值或表達式進行加(+)、減(-)、乘(*)、除(/)和取模(%)運算,下面這篇文章主要給大家介紹了關(guān)于SQL算術(shù)運算符之加法、減法、乘法、除法和取模用法的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • mysql免安裝版配置教程

    mysql免安裝版配置教程

    這篇文章主要為大家詳細介紹了mysql免安裝版配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • linux忘記mysql密碼處理方法

    linux忘記mysql密碼處理方法

    這篇文章主要為大家介紹下linux忘記mysql密碼處理方法,需要的朋友可以參考下。
    2011-08-08

最新評論

阿坝县| 石狮市| 类乌齐县| 乌拉特后旗| 西乌珠穆沁旗| 康马县| 叙永县| 滕州市| 澄迈县| 宣武区| 莆田市| 沂南县| 新泰市| 利辛县| 当阳市| 兴安盟| 渑池县| 苏州市| 永吉县| 和田县| 确山县| 日喀则市| 青浦区| 松溪县| 嵊州市| 湘潭市| 紫金县| 凌海市| 江安县| 定边县| 叙永县| 陕西省| 平塘县| 中牟县| 安陆市| 九江县| 广东省| 赫章县| 清丰县| 西丰县| 施甸县|