欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年07月28日 10:21:48   作者:兩菜一湯、  
這篇文章主要介紹了mysql中關于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這兩個關鍵字應用的場景重合度并不高,但是我們可以通過思考這么一個問題,來理清這兩者執(zhí)行的執(zhí)行過程和邏輯。

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

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

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

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

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

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

in 條件實際查詢的時候是多次搜索索引樹,而 between 條件只需要執(zhí)行一次搜索樹的查詢就可以獲得結(jié)果,本題為例,加入索引的底層實現(xiàn)結(jié)構(gòu)使用的是b+樹,使用關鍵字 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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MySQL 數(shù)據(jù)丟失排查案例

    MySQL 數(shù)據(jù)丟失排查案例

    這篇文章主要分享了MySQL 數(shù)據(jù)丟失排查的一個案例,幫助大家更好的理解和學習使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-05-05
  • MySql官方手冊學習筆記1 MySql簡單上手

    MySql官方手冊學習筆記1 MySql簡單上手

    這是我學習MySql 5.1時做的一些整理與筆記,希望能理一理自己學到的東西,如果能有助于各位同道學習MySql那就更是意外之喜了,呵呵
    2012-10-10
  • 淺談Mysql中類似于nvl()函數(shù)的ifnull()函數(shù)

    淺談Mysql中類似于nvl()函數(shù)的ifnull()函數(shù)

    下面小編就為大家?guī)硪黄獪\談Mysql中類似于nvl()函數(shù)的ifnull()函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 關于Mysql插入中文字符報錯ERROR 1366(HY000)的解決方法

    關于Mysql插入中文字符報錯ERROR 1366(HY000)的解決方法

    這篇文章主要介紹了關于Mysql插入中文字符報錯ERROR 1366(HY000)的解決方法,在我們?nèi)粘J褂胢ysql的過程中會經(jīng)常遇到各種報錯,今天我們就來看一下ERROR 1366報錯的解決方法吧
    2023-07-07
  • MySQL字符串截取指定字符串right使用示例

    MySQL字符串截取指定字符串right使用示例

    這篇文章主要為大家啊AI介紹了MySQL字符串截取指定字符串right使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • MySQL?數(shù)據(jù)庫的對庫的操作及其數(shù)據(jù)類型

    MySQL?數(shù)據(jù)庫的對庫的操作及其數(shù)據(jù)類型

    這篇文章主要介紹了MySQL?數(shù)據(jù)庫的對庫的操作及其數(shù)據(jù)類型,下面文字圍繞數(shù)據(jù)庫的對庫的操作及其數(shù)據(jù)類型的相關資料展開詳細介紹,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • MySQL分庫分表的幾種方式

    MySQL分庫分表的幾種方式

    這篇文章主要介紹了MySQL分庫分表的幾種方式,分庫分表方案是對關系型數(shù)據(jù)庫數(shù)據(jù)存儲和訪問機制的一種補充,下文更多相關介紹需要的小伙伴可以參考一下
    2022-04-04
  • 實現(xiàn)MySQL與elasticsearch的數(shù)據(jù)同步的代碼示例

    實現(xiàn)MySQL與elasticsearch的數(shù)據(jù)同步的代碼示例

    MySQL 自身簡單、高效、可靠,是又拍云內(nèi)部使用最廣泛的數(shù)據(jù)庫,但是當數(shù)據(jù)量達到一定程度的時候,對整個 MySQL 的操作會變得非常遲緩,這個時候我們就需要MySQL與elasticsearch數(shù)據(jù)同步,接下來就給大家介紹如何實現(xiàn)數(shù)據(jù)同步
    2023-07-07
  • 關于mysql查詢字符集不匹配問題的解決方法

    關于mysql查詢字符集不匹配問題的解決方法

    這篇文章主要給大家介紹了關于mysql查詢字符集不匹配問題的解決方法,文中通過示例代碼給大家介紹的非常詳細,對同樣遇到這個問題的朋友們具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • 解決MySQL 5.7中定位DDL被阻塞的問題

    解決MySQL 5.7中定位DDL被阻塞的問題

    這篇文章主要介紹了MySQL 5.7中如何定位DDL被阻塞的問題,在MySQL 5.7中,針對MDL,引入了一張新表performance_schema.metadata_locks,該表可對外展示MDL的相關信息,包括其作用對象,類型及持有等待情況。對此問題感興趣的朋友參考下本文
    2018-08-08

最新評論