SQL 語句的查詢結果的的順序是由哪些因素決定

時間 2021-06-03 03:21:32

1樓:

What is the default Order By of queries?

SQL best practice to deal with default sort order

MySQL row order for 「SELECT * FROM table_name;」

2樓:mysqlops

LZ的這個SQL是沒有附加任何排序規則,以及資料篩選規則,所以就LZ的這個問題,我們可以大致這樣解答:

1.分儲存引擎,典型的:MyISAM還是InnoDB2.資料肯定根據主鍵或類似主鍵作用的索引來讀取的,若是沒有主鍵,那麼是根據全表掃瞄讀取的,也可能根據隱含的主鍵

3.索引儲存的結構,比如B-tree,還是B+索引4.其次才是資料插入的順序,比如對於InnoDB,就會調整記錄的順序,而不一定按插入順序而定的...

若是LZ的SQL有附加的篩選條件或者排序條件,那就該另議論了。

3樓:簡朝陽

Gray 說的比較準確,影響因素會隨著環境的差異而不一樣。

總的來說,會與以下因素有關:

索引方式

物理位置

儲存引擎

當然,可能還會有一些其他的細節

4樓:Gary Chen

1.我想和oracle差不多,按資料塊(索引塊)內記錄的物理順序. 不保證一定按照插入記錄的順序.

2. 諸位同學說的按照插入順序,沒有證據證明此點. 也難以保證;

比如乙個myisam表,全表掃瞄返回記錄,那麼是按照物理的順序的,如果使用索引查詢,是索引順序和物理儲存順序的結合,如果僅僅讀取index(比如覆蓋索引),就是index的順序,

還有,innodb的記錄插入,實質上是乙個索引組織表,主鍵不太可能都是順序插入的,如何保證按照插入順序讀取出結果呢?

3.總之,這個順序不好確定,也不應該決定於什麼因素,不同的資料庫實現不同.只能用order by 來限定.

5樓:謝立超

不同的引擎有不同的結果,一般來說是按找插入的順序,這樣也利於使用者理解,我們開發的引擎的這個順序就經歷過幾次變化,開始的時候按倒序,後來為了適應資料結構,變成了部分隨機,最後確定是按照插入順序,一般來說不應依賴於這個順序,如果一定要有順序,請使用order by,當然,order by的列上最好建上索引。

SQL語句如何查詢各個使用者最長的連續登陸天數?

Kinglong 可以使用rownumber 給每個uid的logintime排順序,然後通過date sub得到每個日期減去序號的日期 可以理解為每次連續登入開始的前一天 再group by這個日期就能得到每次連續登入對應的天數,再取最大值就能得到最長連續登入天數。例子 UID logintime...

SQL查詢指定某行某列的資料語句如何表達?

愛凡線上 sql中沒有行的固定表達,因為排序規則不一樣,其所處的行也是不一樣的。你要看這一行的資料存不存在主鍵,如果存在主鍵你只要按照主鍵檢索就可以。select from user where uid 第二行資料的ID值 SQL的每一列都有列名的,例如第5列的列名是flag 那麼你的指令可以寫成 ...

sql迴圈巢狀查詢的使用

吃肉不長肉 oracle資料庫 select from select from select rownum as id,product,New ID,Old ID from tables start with Old ID 1212 connect by prior New ID Old ID or...