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

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)化直接返回結果

在一次數(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對應的值是 Select tables optimized away

order by + limit 的extra選項對應的值是 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過濾。

結論:因為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會把所有查詢到的結果并展示出來。

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ù)時返回結果。而不是對整個結果進行排序。

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

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

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

總結

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

相關文章

  • MySQL聚合查詢案例講解

    MySQL聚合查詢案例講解

    這篇文章主要介紹了MySQL聚合查詢案例講解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • mysql 查詢數(shù)據(jù)庫響應時長的方法示例

    mysql 查詢數(shù)據(jù)庫響應時長的方法示例

    要查詢MySQL數(shù)據(jù)庫的響應時長,通常我們需要測量查詢執(zhí)行的時間,本文主要介紹了mysql 查詢數(shù)據(jù)庫響應時長的方法示例,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 深入Mysql,SqlServer,Oracle主鍵自動增長的設置詳解

    深入Mysql,SqlServer,Oracle主鍵自動增長的設置詳解

    本篇文章是對Mysql,SqlServer,Oracle主鍵自動增長的設置進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL8.0中你必須要知道的索引新特性

    MySQL8.0中你必須要知道的索引新特性

    MySQL8.0索引新特性,支持降序索引,降序索引以降序存儲鍵值,下面這篇文章主要給大家介紹了關于MySQL8.0中你必須要知道的索引新特性的相關資料,需要的朋友可以參考下
    2022-11-11
  • MySQL DML語句整理匯總

    MySQL DML語句整理匯總

    這篇文章主要介紹了MySQL DML語句整理匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • MySQL數(shù)據(jù)庫中varchar類型的數(shù)字比較大小的方法

    MySQL數(shù)據(jù)庫中varchar類型的數(shù)字比較大小的方法

    varchar類型的數(shù)據(jù)是不能直接比較大小的,那么MySQL數(shù)據(jù)庫中varchar類型如何進行數(shù)字比較大小的,本文就詳細的介紹一下
    2021-11-11
  • MySQL聯(lián)結表介紹以及使用詳解

    MySQL聯(lián)結表介紹以及使用詳解

    這篇文章主要給大家介紹了關于MySQL聯(lián)結表介紹及使用的相關資料,聯(lián)結SQL最強大的功能之一就是能在數(shù)據(jù)檢索查詢的執(zhí)行中聯(lián)結表,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • Mysql中explain作用詳解

    Mysql中explain作用詳解

    這篇文章主要介紹了Mysql中explain的相關內(nèi)容,涉及索引的部分知識,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • SQL使用ROW_NUMBER() OVER函數(shù)生成序列號

    SQL使用ROW_NUMBER() OVER函數(shù)生成序列號

    這篇文章主要介紹了SQL使用ROW_NUMBER() OVER函數(shù)生成序列號,ROW_NUMBER()從1開始,為每一條分組記錄返回一個數(shù)字,下面文章內(nèi)容具有一定的參考價值,需要的小伙伴可以參考一下
    2021-12-12
  • MySQL FIND_IN_SET函數(shù)的使用場景

    MySQL FIND_IN_SET函數(shù)的使用場景

    本文介紹了MySQL中FIND_IN_SET函數(shù)的基本語法和使用場景,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01

最新評論

吉林省| 逊克县| 锡林浩特市| 永丰县| 石阡县| 盐津县| 木兰县| 启东市| 镶黄旗| 侯马市| 克拉玛依市| 五河县| 清水河县| 康平县| 宁武县| 探索| 错那县| 惠来县| 永德县| 德兴市| 博客| 维西| 新营市| 互助| 奈曼旗| 白玉县| 盘山县| 武鸣县| 宁武县| 峨眉山市| 黄山市| 南木林县| 怀安县| 馆陶县| 会东县| 张北县| 彭泽县| 安康市| 泗水县| 翁牛特旗| 韶关市|