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

mysql order by limit 1和max的比較及說明

 更新時間:2025年09月12日 09:20:02   作者:hammring  
使用ORDER BY + LIMIT 1和MAX查詢最大值時,ORDER BY + LIMIT 1更快,因主鍵索引有序,ORDER BY在找到第一條數(shù)據(jù)后停止,而MAX直接通過索引獲取最大值,無需遍歷表,執(zhí)行計劃顯示前者使用索引排序,后者利用索引優(yōu)化直接返回結(jié)果

在一次數(shù)據(jù)的需求中,去用order by+limit 1和 max兩種方式求數(shù)據(jù)的最大值時,發(fā)現(xiàn)在同一過濾條件下order by limit 1執(zhí)行時間要比max快。然后從一下兩個角度對問題進行來思考。

1.查看執(zhí)行計劃

  • a.max查詢計劃

  • b.order by+limit 1查詢計劃

其中Extra是指執(zhí)行情況的描述和說明。max的extra對應(yīng)的值是 Select tables optimized away

order by + limit 的extra選項對應(yīng)的值是 Using index

extra項解釋:

Select tables optimized away:

使用某些聚合函數(shù)(比如 max、min)來訪問存在索引的某個字段

來自于mysql官網(wǎng)對Select tables optimized away的描述:

For explains on simple count queries (i.e. explain select count(*) from 
people) the extra section will read "Select tables optimized away.
" This is due to the fact that MySQL can read the result directly from
 the table internals and  therefore does not need to perform the select.

Using index:直接在主鍵索引上完成查詢和所有數(shù)據(jù)的獲取。

2.order by和where的執(zhí)行順序

是否是先做的order by,后使用where過濾。

結(jié)論:因為max和order by+limit 1都是使用的主鍵值進行查詢,而主鍵在mysql中是b+樹。在葉子節(jié)點主鍵id本身就是按從小大的順序排列的。所以在查詢中會出現(xiàn)以下兩種情況:

a.如果是查詢普通列(非主鍵且該值沒有索引列)條件,max()的查詢速度要優(yōu)于order by+limit 1,原因是從explain的執(zhí)行計劃中可以看出:order by+limit 1使用了索引,而使用max根本沒有遍歷表或索引就返回數(shù)據(jù)了

b.如果是主鍵值的查詢可以分兩種情況來討論:

1.)如果是max()和order by速度的比較

max()的速度要比order by快,order by會把所有查詢到的結(jié)果并展示出來。

select max(id) from  table_name:
select id  from  table_name  order by id desc;

2.)如果是max()和order by+limit 1 速度的比較

order by+limit 1會在查到第一條數(shù)據(jù)時返回結(jié)果。而不是對整個結(jié)果進行排序。

如果使用索引來完成排序,這將非??臁?/p>

如果你將LIMIT row_count子句與ORDER BY子句組合在一起使用的話,一旦找到第一個row_count之后,MySQL不會對結(jié)果集的任何剩余部分進行排序。

這種行為的一種表現(xiàn)形式是,一個ORDER BY查詢帶或者不帶LIMIT可能返回行的順序是不一樣的。

總結(jié)

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

相關(guān)文章

  • MySQL的commit是如何commit源碼解析

    MySQL的commit是如何commit源碼解析

    這篇文章主要為大家介紹了MySQL的commit是如何commit源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • ubuntu20.04配置mysql8.0的實現(xiàn)步驟

    ubuntu20.04配置mysql8.0的實現(xiàn)步驟

    本文主要介紹了ubuntu20.04配置mysql8.0的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 淺析MySQL 鎖和事務(wù)

    淺析MySQL 鎖和事務(wù)

    這篇文章主要介紹了MySQL 鎖和事務(wù)的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • MySQL半同步復(fù)制原理配置與介紹詳解

    MySQL半同步復(fù)制原理配置與介紹詳解

    這篇文章主要介紹了MySQL半同步復(fù)制原理配置與介紹詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作示例

    MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作示例

    這篇文章主要介紹了MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作,結(jié)合實例形式分析了MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作基本命令、使用方法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • mysql分表分庫的應(yīng)用場景和設(shè)計方式

    mysql分表分庫的應(yīng)用場景和設(shè)計方式

    為大家講述一下在mysql在什么到時候需要進行分表分庫,以及現(xiàn)實的設(shè)計方式。
    2017-11-11
  • mysql8.0配置文件my.ini詳解

    mysql8.0配置文件my.ini詳解

    這篇文章主要介紹了mysql8.0配置文件my.ini,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • MySQL中Join的算法(NLJ、BNL、BKA)詳解

    MySQL中Join的算法(NLJ、BNL、BKA)詳解

    這篇文章主要介紹了MySQL中Join的算法(NLJ、BNL、BKA)詳解,Join是MySQL中最常見的查詢操作之一,用于從多個表中獲取數(shù)據(jù)并將它們組合在一起,本文將探討這兩種算法的工作原理,以及如何在MySQL中使用它們
    2023-07-07
  • Mysqli基礎(chǔ)知識

    Mysqli基礎(chǔ)知識

    本文給大家講述的是Mysqli的基礎(chǔ)知識,非常的淺顯易懂,有需要的小伙伴就可以參考下。
    2015-07-07
  • Windows下安裝MySQL 5.7.17壓縮版中遇到的坑

    Windows下安裝MySQL 5.7.17壓縮版中遇到的坑

    最近發(fā)現(xiàn)原來好端端的MySQL突然間不能用了,無奈只能重新下載了最新的MySQL 5.7.17 Community 壓縮版 for Windows 64-bit。但在安裝過程中遇到了一些意外的問題,通過查找相關(guān)資料也解決了,所以想著總結(jié)出來,方便需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-01-01

最新評論