国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL使用SELECT 語句不加ORDER BY默認(rèn)是如何排序的?

這篇具有很好參考價(jià)值的文章主要介紹了MySQL使用SELECT 語句不加ORDER BY默認(rèn)是如何排序的?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

大家好,我是阿飛云

怕什么真理無窮,進(jìn)一步有近一步的歡喜

記錄一個(gè)MySQL查詢排序的問題,一個(gè)SQL語句沒有加order by,那么查詢出來的結(jié)果到底是按照什么規(guī)則排序的呢?查詢了網(wǎng)上的一些資料,分享如下:

?MyISAM 表

MySQL Select 默認(rèn)排序是按照物理存儲(chǔ)順序顯示的(不進(jìn)行額外排序)。也就是說SELECT * FROM tbl – 會(huì)產(chǎn)生“表掃描”。如果表沒有刪除、替換、更新操作,記錄會(huì)顯示為插入的順序。

?InnoDB 表

同樣的情況,會(huì)按主鍵的順序排列,需要再次強(qiáng)調(diào),這只是潛規(guī)則,實(shí)際也不一定完全靠譜的。

參考:MySQL也有潛規(guī)則 – Select 語句不加 order by 如何排序?[1]



如果沒有定義?order by:

那返回的數(shù)據(jù)不一定是按照主鍵來排序的,結(jié)果可以以任意順序返回 - 也可能隨著時(shí)間而改變。

在關(guān)系數(shù)據(jù)庫中沒有“自然順序”或類似的東西(至少在我所知道的情況下)。獲得可靠排序的唯一方法是顯式指定?order by子句,來源when-no-order-by-is-specified-what-order-does-a-query-choose-for-your-record[2]

對(duì)于同樣的一批數(shù)據(jù),在某一個(gè)時(shí)刻順序是一樣的,隨著時(shí)間變化,數(shù)據(jù)會(huì)發(fā)生變化,那么在進(jìn)行查詢的時(shí)候,MySQL 會(huì)嘗試以盡可能快的方法(MySQL 實(shí)際的方法不見得快)返回?cái)?shù)據(jù)。

由于訪問主鍵、索引大多數(shù)情況會(huì)快一些(在Cache里)所以返回的數(shù)據(jù)有可能以主鍵、索引的順序輸出,這里并不會(huì)真的進(jìn)行排序,主要是由于主鍵、索引本身就是排序放到內(nèi)存的,所以連續(xù)輸出時(shí)可能是某種序列。在一些情況下消耗硬盤尋道時(shí)間最短的數(shù)據(jù)會(huì)先返回。如果只查詢單個(gè)表,在特殊的情況下是有規(guī)律的。



下面的內(nèi)容分析來源:what-is-the-default-order-of-records-for-a-select-statement-in-mysql[3]

MySQL 中 SELECT 語句的默認(rèn)記錄順序是什么?

MySQL使用SELECT 語句不加ORDER BY默認(rèn)是如何排序的?

里面有一個(gè)認(rèn)可和點(diǎn)贊比較高的回答:

MySQL使用SELECT 語句不加ORDER BY默認(rèn)是如何排序的?

大致解讀一下回答的內(nèi)容,重新發(fā)布一下之前回答過的一個(gè)SQL Server類型的問題。

在 SQL 世界中,順序不是一組數(shù)據(jù)的固有屬性。因此,除非您使用 order by 子句查詢您的數(shù)據(jù),否則您無法從 RDBMS 保證您的數(shù)據(jù)將按特定順序返回 - 甚至以一致的順序返回。

然后回答你的問題:

?MySQL 根據(jù)需要對(duì)記錄進(jìn)行排序,但沒有任何一致性保證?如果您打算依賴此順序進(jìn)行任何操作,則必須使用 order by 指定您想要的順序。否則做任何其他事情都是在為不受歡迎的意外做好準(zhǔn)備。

這是所有 SQL 的屬性,而不僅僅是 MySQL。SQL-92 規(guī)范中的相關(guān)文本是:

http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

如果未指定 <order by 子句>,則 Q 的行的順序取決于底層實(shí)現(xiàn)。


本文的內(nèi)容就是如上這些內(nèi)容了,大致總結(jié)一下: 如果在使用沒有指定order by,那么基本上依賴于底層實(shí)現(xiàn)的,具體排序規(guī)則不定,所以排序的順序也不固定,可能會(huì)隨著時(shí)間發(fā)生變化。

在實(shí)際工作中,如果有查詢列表展示數(shù)據(jù)的功能和需求,開發(fā)前一定要先確定數(shù)據(jù)排序的規(guī)則,這樣可以避免后續(xù)出現(xiàn)數(shù)據(jù)查詢的排序結(jié)果不同的問題。

如果對(duì)MySQL SELECT 語句的默認(rèn)記錄順序有了解或者有研究的伙伴,歡迎留言分享你的理解。

如果文章對(duì)你有所幫助,點(diǎn)贊支持一下,感謝你的慷慨~

References

[1]?MySQL也有潛規(guī)則 – Select 語句不加 order by 如何排序?:?https://www.cnblogs.com/lushilin/p/6094373.html
[2]?when-no-order-by-is-specified-what-order-does-a-query-choose-for-your-record:?https://stackoverflow.com/questions/20050341/when-no-order-by-is-specified-what-order-does-a-query-choose-for-your-record
[3]?what-is-the-default-order-of-records-for-a-select-statement-in-mysql:?https://dba.stackexchange.com/questions/6051/what-is-the-default-order-of-records-for-a-select-statement-in-mysql

推薦閱讀

MySQL數(shù)據(jù)庫設(shè)計(jì)規(guī)范,值得一讀

MySQL數(shù)據(jù)庫之互聯(lián)網(wǎng)常用分庫分表方案

【 一個(gè)人看起來在進(jìn)行邏輯思考,但其實(shí)大多數(shù)時(shí)間只是在進(jìn)行記憶檢索?!?

MySQL使用SELECT 語句不加ORDER BY默認(rèn)是如何排序的?
文章來源地址http://www.zghlxwxcb.cn/news/detail-494992.html

See you next good day~

到了這里,關(guān)于MySQL使用SELECT 語句不加ORDER BY默認(rèn)是如何排序的?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Hive(23):Select高級(jí)查詢之SORT/ORDER/CLUSTER/DISTRIBUTE BY

    1 ORDER BY ORDER BY [ASC|DESC] Hive SQL中的ORDER BY語法類似于SQL語言中的ORDER BY語法。會(huì)對(duì)輸出的結(jié)果進(jìn)行全局排序,因此底層使用MapReduce引擎執(zhí)行的時(shí)候,只會(huì)有一個(gè)reducetask執(zhí)行。也因此,如果輸出的行數(shù)太大,會(huì)導(dǎo)致需要很長的時(shí)間才能完成全局排序。 默認(rèn)排序順序?yàn)樯颍ˋSC)

    2024年02月15日
    瀏覽(23)
  • 如何使用SQL系列 之 如何在SQL中使用GROUP BY和ORDER BY

    結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)庫可以跨多個(gè)表存儲(chǔ)和管理大量數(shù)據(jù)。對(duì)于大型數(shù)據(jù)集,理解如何排序數(shù)據(jù)是很重要的,特別是對(duì)于分析結(jié)果集或?yàn)閳?bào)告或外部通信組織數(shù)據(jù)。 SQL中有兩個(gè)常用的用于數(shù)據(jù)排序的語句: GROUP BY 和 ORDER BY 。 GROUP BY 語句根據(jù)查詢中指定的列對(duì)數(shù)據(jù)進(jìn)行分組

    2024年02月09日
    瀏覽(20)
  • mysql8之前如何實(shí)現(xiàn)row_number() over(partition by xxx order by xxx asc/desc)

    mysql8之前如何實(shí)現(xiàn)row_number() over(partition by xxx order by xxx asc/desc)

    最近筆者在進(jìn)行對(duì)廣告業(yè)務(wù)的數(shù)據(jù)統(tǒng)計(jì)時(shí)遇到這種情況,業(yè)務(wù)方嫌棄離線數(shù)倉太慢,又無需太高的實(shí)時(shí)性本該使用即席查詢的OLAP去做,但是當(dāng)前公司調(diào)研的OLAP還沒有推到廣告業(yè)務(wù)側(cè),無奈只得使用mysql暫時(shí)頂一下。我們當(dāng)前使用的是mysql5.7。 一充用戶 :當(dāng)日只有一次充值的

    2024年02月05日
    瀏覽(19)
  • Mysql 中,為什么 WHERE 使用別名會(huì)報(bào)錯(cuò),而 ORDER BY 不會(huì)報(bào)錯(cuò)?

    ? ?我們先對(duì)salary * 12 命名一個(gè)別名annual_sal ?這段代碼以annual_sal升序輸出且正常執(zhí)行沒有報(bào)錯(cuò)。說明 order by 可以使用別名 ?我們?cè)倏纯催@個(gè)段代碼 這段代碼就報(bào)錯(cuò)了,報(bào)錯(cuò)說明是 Unknown column \\\'annual_sal\\\' in \\\'where clause\\\'。 由此可以得出where語句執(zhí)行是找不到annual_sal. 要解決這個(gè)問

    2023年04月15日
    瀏覽(23)
  • MySQL 數(shù)據(jù)庫查詢與數(shù)據(jù)操作:使用 ORDER BY 排序和 DELETE 刪除記錄

    使用 ORDER BY 語句按升序或降序?qū)Y(jié)果進(jìn)行排序。 ORDER BY 默認(rèn)按升序排序。要按降序排序結(jié)果,使用 DESC 。 示例按名稱按字母順序排序結(jié)果: ORDER BY DESC 使用 DESC 以降序排序結(jié)果。 示例按名稱以字母逆序排序結(jié)果: 您可以使用\\\"DELETE FROM\\\"語句從現(xiàn)有表格中

    2024年02月05日
    瀏覽(39)
  • 如何進(jìn)行MySQL源碼調(diào)試(一條select語句的執(zhí)行流程)

    如何進(jìn)行MySQL源碼調(diào)試(一條select語句的執(zhí)行流程)

    一、背景 MySQL是當(dāng)今世上最受歡迎的使用最廣泛的開源數(shù)據(jù)庫,它的繁榮離不開它的開源特性。放在過去商業(yè)數(shù)據(jù)庫的時(shí)代,大家都沒有機(jī)會(huì)接觸到數(shù)據(jù)庫的源代碼,但在如今開源數(shù)據(jù)庫的時(shí)代,越來越多的人開始研究數(shù)據(jù)庫的源碼,并給社區(qū)貢獻(xiàn)代碼,MySQL官方每次發(fā)布新

    2024年02月03日
    瀏覽(22)
  • mysql中order by多個(gè)字段 order by字段可以為空嗎

    在MySQL中,要使用“ORDER BY”語句來進(jìn)行多字段排序,必須先將多個(gè)字段的名稱按照順序排列放在“ORDER BY”后面,然后按照每個(gè)字段單獨(dú)的排序規(guī)則進(jìn)行排序。 排序字段的順序按照order by語句中的先后順序進(jìn)行, 先根據(jù)第一個(gè)排序字段排序 ,如果有相同的值,則根據(jù)第二個(gè)

    2024年02月03日
    瀏覽(21)
  • mysql GROUP BY 怎么 order by 排序

    在 MySQL 中使用 GROUP BY 子句時(shí),如果需要對(duì)結(jié)果進(jìn)行排序,可以使用 ORDER BY 子句來對(duì)分組后的結(jié)果進(jìn)行排序。 ORDER BY 子句應(yīng)該放在 GROUP BY 子句之后,使用逗號(hào)來分隔需要排序的列,并在排序列后指定排序順序。例如: 在這個(gè)例子中,SELECT 語句選擇了表 table1 中的列 column1 和

    2024年02月16日
    瀏覽(16)
  • mysql order by 索引問題綜合分析

    mysql order by 索引問題綜合分析

    一,文章1 Mysql-索引失效 order by優(yōu)化_orderby索引失效_zyk1.的博客-CSDN博客 總結(jié): 0,索引 與 查詢條件 與 排序字段關(guān)系,Using filesort出現(xiàn)場(chǎng)景 1.聯(lián)合索引,最左匹配原則,不僅查詢條件需要遵循,排序也需要遵循,查詢+排序組合也要遵循 2.extra 避免出現(xiàn)filesort,使用index排序

    2024年02月07日
    瀏覽(20)
  • mysql織夢(mèng)索引優(yōu)化之MySQL Order By索引優(yōu)化

    在一些情況下,MySQL可以直接使用索引來滿足一個(gè)ORDER BY 或GROUP BY 子句而無需做額外的排序。盡管ORDER BY 不是和索引的順序準(zhǔn)確匹配,索引還是可以被用到,只要不用的索引部分和所有的額外的ORDER BY 字段在WHERE 子句中都被包括了。 使用索引的MySQL Order By 下列的幾個(gè)查詢都會(huì)

    2024年02月04日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包