比如一個學生表,里面有名稱name欄位和分數point欄位,如果sql陳述句如下:
select * from t_student order by point desc
比如有下面樣本資料 :
id name point
1 name1 99
2 name2 99
3 name3 90
如果分數相同,回傳的結果是name1在前面還是name2在前面?資料庫查詢時根據什么邏輯回傳的?是不是無論資料怎么變,查詢第一遍和查詢第二遍,回傳的順序都是一樣的?還是說我加了資料,改變了索引什么的,然后重復查詢回傳資料可能不一樣?
uj5u.com熱心網友回復:
順序不能保證,無法預知哪個在前哪個在后你可以指定多個排序欄位
uj5u.com熱心網友回復:
排序的欄位是一樣的值,查詢結果可能會每次不一樣uj5u.com熱心網友回復:
如果僅是這個 select * from t_student order by point desc 簡單陳述句,沒有JOIN,沒有其它,在t_student表中無記錄DELETE/INSERT/UPDATE的情況下,每次出的順序應該是一樣的。但從資料理論上來說,沒有ORDER BY的情況下資料庫系統不保證順序。
uj5u.com熱心網友回復:
回傳應該是一樣的。uj5u.com熱心網友回復:
版主大大,如果做了DELETE/INSERT/UPDATE,但是這些分數都是比較小的,然后我limit 2,就是做的DELETE/INSERT/UPDATE操作不對查詢結果影響,這樣每次還回傳同樣的結果嗎?好奇只有一個Ordr by 欄位,當出現這個欄位有相同資料時,資料庫是怎么按照順序回傳的?
uj5u.com熱心網友回復:
are you sure?
uj5u.com熱心網友回復:
嗯,就是好奇不指定后,每次回傳的結果是否一樣?
uj5u.com熱心網友回復:
無法明確確定順序的,比如沒有 order by ,或者 order by 值重復的,參演是按斬訓取資料的先后,所以這個順序通常無法保障,比如資料變化了,導致資料存盤的頁變了,或者是第一次取的時候沒沒有快取,全部從磁盤取,第2次部分有快取,只有部分需要從磁盤取影響的因素多,不過通常對單表而言,除非是熱點表,否則受到影響的機率比較低,查詢時間間隔越短,結果相同的概率越大
uj5u.com熱心網友回復:
單單這張表資料不變化,查詢回傳的結果就一樣?會不會受到其他表資料的影響?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/95191.html
標籤:MySQL
