Mysql排序的特性详情


1銆侀棶棰樺満鏅?/h2>

鏂颁笂绾夸竴涓氦鏄撹褰曞鍑哄姛鑳斤紝閫昏緫寰堢畝鍗曪細鏍规嵁鏌ヨ鏉′欢锛屽鍑哄搴旂殑鏁版嵁銆傜敱浜庢暟鎹噺姣旇緝澶э紝鍦ㄦ煡璇㈡暟鎹簱鏃堕噰鐢ㄤ簡鍒嗛〉鏌ヨ锛屾瘡娆℃煡璇?000鏉℃暟鎹?/p>

鑷祴姝e父锛屾祴璇曠幆澧冩甯革紝涓婄嚎涔嬪悗杩愯惀鍙嶉瀵煎嚭鐨?strong>鏁版嵁鏈夐噸澶嶈褰?/strong>銆?/p>

鍘熸湰鏄互涓轰笟鍔¢昏緫闂锛岄噸鏂?code>Review浜嗕竴閬嶄唬鐮侊紝渚濇棫鏈壘鍒伴棶棰樺師鍥犮傛渶鍚庡彧濂芥妸SQL璇彞鎷垮嚭鏉ュ崟鐙墽琛岋紝瀵煎嚭鏁版嵁锛屽姣斿彂鐜扮珶鐒舵槸SQL璇彞鏌ヨ缁撴灉涔卞簭瀵艰嚧鐨勩?/p>

2銆佸師鍥犲垎鏋?/h2>

鏌ヨ璇彞浠?code>create_time杩涜鍊掑簭鎺掑簭锛岄氳繃limit杩涜鍒嗛〉锛屽湪姝e父鎯呭喌涓嬩笉浼氬嚭鐜伴棶棰樸備絾褰撲笟鍔″苟鍙戦噺姣旇緝澶э紝瀵艰嚧create_time瀛樺湪澶ч噺鐩稿悓鍊兼椂锛屽啀鍩轰簬limit杩涜鍒嗛〉锛屽氨浼氬嚭鐜颁贡搴忛棶棰樸?/p>

鍑虹幇鐨勫満鏅槸锛?/strong>浠?code>create_time鎺掑簭锛屽綋create_time瀛樺湪鐩稿悓鍊硷紝閫氳繃limit鍒嗛〉锛屽鑷村垎椤垫暟鎹贡搴忋?/p>

姣斿锛屾煡璇?code>1000鏉℃暟鎹紝鍏朵腑鏈変竴鎵?code>create_time璁板綍鍊奸兘涓衡?code>2021-10-28 12:12:12鈥滐紝褰撳垱寤烘椂闂寸浉鍚岀殑杩欎簺鏁版嵁锛屼竴閮ㄥ垎鍑虹幇鍦ㄧ涓椤碉紝涓閮ㄥ垎鍑虹幇鍦ㄧ浜岄〉锛屽湪鏌ヨ绗簩椤电殑鏁版嵁鏃讹紝鍙兘浼氬嚭鐜扮涓椤靛凡缁忔煡杩囩殑鏁版嵁銆?/p>

涔熷氨鏄锛屾暟鎹細鏉ュ洖璺冲姩锛屼竴浼氬効鍑虹幇鍦ㄧ涓椤碉紝涓浼氬効鍑虹幇鍦ㄧ浜岄〉锛岃繖灏卞鑷村鍑虹殑鏁版嵁涓閮ㄥ垎閲嶅锛屼竴閮ㄥ垎缂哄け銆?/p>

鏌ョ湅浜哅ysql 5.7鍜?.0鐨勫畼鏂规枃妗o紝鎻忚堪濡備笅锛?/strong>

If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, and may do so differently depending on the overall execution plan. In other words, the sort order of those rows is nondeterministic with respect to the nonordered columns.

涓婅堪鍐呭姒傝堪锛?/strong>鍦ㄤ娇鐢?code>ORDER BY瀵瑰垪杩涜鎺掑簭鏃讹紝濡傛灉瀵瑰簲锛?code>ORDER BY鐨勫垪锛夊垪瀛樺湪澶氳鐩稿悓鏁版嵁锛岋紙Mysql锛夋湇鍔″櫒浼氭寜鐓т换鎰忛『搴忚繑鍥炶繖浜涜锛屽苟涓斿彲鑳戒細鏍规嵁鏁翠綋鎵ц璁″垝浠ヤ笉鍚岀殑鏂瑰紡杩斿洖銆?/p>

绠鍗曟潵璇村氨鏄細ORDER BY鏌ヨ鐨勬暟鎹紝濡傛灉ORDER BY鍒楀瓨鍦ㄥ琛岀浉鍚屾暟鎹紝Mysql浼氶殢鏈鸿繑鍥炪傝繖灏变細瀵艰嚧铏界劧浣跨敤浜嗘帓搴忥紝浣嗕篃浼氬彂鐢熶贡搴忕殑鐘跺喌銆?/p>

3銆佽В鍐虫柟妗?/h2>

閽堝涓婅堪闂锛屽熀鏈殑瑙e喅鎬濊矾鏄細閬垮厤ORDER BY鍒楃殑鍊煎嚭鐜伴噸澶嶃傚洜姝わ紝鍙互鍔犲叆鍏朵粬缁村害锛屾瘮濡侷D绛夊叾浠栨帓搴忓垪銆?/p>

select * from tb_order order by create_time ,id desc;

杩欐牱锛屽湪create_time鐩稿悓鏃讹紝浼氭牴鎹甶d杩涜鎺掑簭锛岃宨d鑲畾鏄笉鍚岀殑锛屽氨鍐嶄笉浼氬嚭鐜颁笂杩伴棶棰樹簡銆?/p>

4銆佹嫇灞曠煡璇?/h2>

鍏跺疄锛屼笂杩板唴瀹瑰湪Mysql鐨勫畼缃戝凡缁忔湁鏄庣‘璇存槑锛岃屼笖杩樹妇浜嗕緥瀛愩備笅闈㈠瀹樼綉鐨勫唴瀹瑰拰渚嬪瓙鍋氫竴涓畝鍗曠殑姹囨绘荤粨銆?br />

4.1 limit鏌ヨ浼樺寲

濡傛灉鎴戜滑鍙槸鏌ヨ涓涓粨鏋滈泦鐨勪竴閮ㄥ垎锛岄偅涔堜笉瑕佹煡璇㈡墍鏈夋暟鎹紝鐒跺悗鍐嶄涪寮冧笉闇瑕佺殑鏁版嵁锛岃屾槸瑕侀氳繃limit鏉′欢鏉ヨ繘琛岄檺鍒躲?/p>

鍦ㄦ病浣跨敤having鏉′欢鏃讹紝Mysql鍙兘浼氬limit鏉′欢浼樺寲锛?/strong>

  • 濡傛灉鍙煡璇㈠嚑鏉℃暟鎹紝寤鸿浣跨敤limit锛岃繖鏍?code>Mysql鍙兘浼氱敤鍒扮储寮曪紝鑰岄氬父鎯呭喌涓?code>Mysql鏄叏琛ㄦ壂鎻忥紱
  • 濡傛灉灏?code>limit row_count鍜?code>order by缁撳悎浣跨敤锛孧ysql浼氬湪鎵惧埌绗竴涓?code>row_count缁撴灉闆嗗悗绔嬪埢鍋滄鎺掑簭锛岃屼笉鏄鏁翠釜缁撴灉闆嗚繘琛屾帓搴忋傚鏋滄鏃跺熀浜庣储寮曡繘琛屾搷浣滐紝閫熷害浼氭洿蹇傚鏋滃繀椤昏繘琛屾枃浠舵帓搴忥紝鍦ㄦ壘鍒?code>row_count缁撴灉闆嗕箣鍓嶏紝浼氬閮ㄥ垎鎴栨墍鏈夌鍚堟潯浠剁殑缁撴灉杩涜鎺掑簭銆備絾褰撴壘鍒?code>row_count缁撴灉涔嬪悗锛屼究涓嶄細瀵瑰墿浣欓儴鍒嗚繘琛屾帓搴忎簡銆傝繖绉嶇壒鎬х殑涓涓〃鐜板氨鏄垜浠墠闈㈡彁鍒扮殑甯︽湁limit鍜屼笉甯imit杩涜鏌ヨ鏃讹紝杩斿洖鐨勭粨鏋滈『搴忓彲鑳戒笉鍚屻?/li>
  • 濡傛灉灏?code>limit row_count鍜宒istinct缁撳悎浣跨敤锛孧ysql浼氬湪鎵惧埌row_count缁撴灉闆嗗敮涓琛屽悗绔嬮┈鍋滄銆?/li>
  • 鍦ㄦ煇浜涙儏鍐典笅锛屽彲浠ラ氳繃鎸夌収椤哄簭璇诲彇绱㈠紩锛堟垨瀵圭储寮曡繘琛屾帓搴忥級锛岀劧鍚庤绠楁憳瑕佺洿鍒扮储寮曞彉鍖栨潵瀹炵幇group by銆傚湪杩欑鎯呭喌涓嬶紝limit row_count涓嶄細璁$畻浠讳綍涓嶅繀瑕佺殑group by鍊笺?/li>
  • 涓鏃ySQL鍚戝鎴风鍙戦佷簡鎵闇鏁伴噺鐨勮锛屽氨浼氫腑姝㈡煡璇紝闄ら潪浣跨敤浜?code>SQL_CALC_FOUND_ROWS銆傚湪杩欑鎯呭喌涓嬶紝鍙互浣跨敤 SELECT FOUND_ROWS() 妫绱㈣鏁般?/li>
  • LIMIT 0浼氬揩閫熻繑鍥炰竴涓┖闆嗗悎锛岄氬父鍙敤浜庢鏌QL鐨勬湁鏁堟с傝繕鍙互鐢ㄤ簬鍦ㄥ簲鐢ㄧ▼搴忎腑鑾峰緱缁撴灉闆嗙殑绫诲瀷銆傚湪Mysql瀹㈡埛绔腑锛屽彲浠ヤ娇鐢?code>--column-type-info鏉ユ樉绀虹粨鏋滃垪绫诲瀷銆?/li>
  • 濡傛灉浣跨敤涓存椂琛ㄦ潵瑙f瀽鏌ヨ锛?code>Mysql浼氫娇鐢?code> limit row_count鏉ヨ绠楅渶瑕佸灏戠┖闂淬?/li>
  • 濡傛灉order by鏈娇鐢ㄧ储寮曪紝涓斿瓨鍦╨imit鏉′欢锛屽垯浼樺寲鍣ㄥ彲鑳戒細閬垮厤浣跨敤鍚堝苟鏂囦欢锛岃岄噰鐢ㄥ唴瀛?code>filesort鎿嶄綔瀵瑰唴瀛樹腑鐨勮杩涜鎺掑簭銆?br />

浜嗚В浜?code>limit鐨勪竴浜涚壒鎬э紝涓嬮潰鍐嶅洖鍒版湰鏂囩殑閲嶇偣锛?code>limit row_count鍜?code>order by缁撳悎浣跨敤鐗规с?/p>

4.2 limit涓巓rder by缁撳悎浣跨敤

鍦ㄤ笂闈㈢浜屾潯涓凡缁忔彁鍒帮紝limit row_count鍜?code>order by缁撳悎鍛堢幇鐨勭壒鎬т箣涓灏辨槸缁撴灉杩斿洖鐨勯『搴忔槸涓嶇‘瀹氱殑銆傝屽奖鍝嶆墽琛岃鍒掔殑涓涓洜绱犲氨鏄?code>limit锛屽洜姝ゅ甫鏈?code>limit涓庝笉甯︽湁limit鎵ц鍚屾牱鐨勬煡璇㈣鍙ワ紝杩斿洖缁撴灉鐨勯『搴忓彲鑳戒笉鍚屻?/p>

涓嬮潰绀轰緥涓紝鏍规嵁category鍒楄繘琛屾帓搴忔煡璇紝鑰宨d鍜宺ating鏄笉纭畾鐨勶細

mysql> SELECT * FROM ratings ORDER BY category;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
|  1 |        1 |    4.5 |
|  5 |        1 |    3.2 |
|  3 |        2 |    3.7 |
|  4 |        2 |    3.5 |
|  6 |        2 |    3.5 |
|  2 |        3 |    5.0 |
|  7 |        3 |    2.7 |
+----+----------+--------+

褰撴煡璇㈣鍙ュ寘鍚玪imit鏃讹紝鍙兘浼氬奖鍝嶅埌category鍊肩浉鍚岀殑鏁版嵁锛?/strong>

mysql> SELECT * FROM ratings ORDER BY category LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
|  1 |        1 |    4.5 |
|  5 |        1 |    3.2 |
|  4 |        2 |    3.5 |
|  3 |        2 |    3.7 |
|  6 |        2 |    3.5 |
+----+----------+--------+

鍏朵腑id涓?鍜?鐨勭粨鏋滀綅缃彂鐢熶簡鍙樺寲銆?/p>

鍦ㄥ疄璺典腑锛屼繚鎸佹煡璇㈢粨鏋滅殑椤哄簭鎬у線寰闈炲父閲嶈锛屾鏃跺氨闇瑕佸紩鍏ュ叾浠栧垪鏉ヤ繚璇佺粨鏋滅殑椤哄簭鎬т簡銆?/p>

褰撲笂杩板疄渚嬪紩鍏d涔嬪悗锛屾煡璇㈣鍙ュ強缁撴灉濡備笅锛?/strong>

mysql> SELECT * FROM ratings ORDER BY category, id;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
|  1 |        1 |    4.5 |
|  5 |        1 |    3.2 |
|  3 |        2 |    3.7 |
|  4 |        2 |    3.5 |
|  6 |        2 |    3.5 |
|  2 |        3 |    5.0 |
|  7 |        3 |    2.7 |
+----+----------+--------+
​
mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
|  1 |        1 |    4.5 |
|  5 |        1 |    3.2 |
|  3 |        2 |    3.7 |
|  4 |        2 |    3.5 |
|  6 |        2 |    3.5 |
+----+----------+--------+

鍙互鐪嬪嚭锛屽綋娣诲姞浜唅d鍒楃殑鎺掑簭锛屽嵆浣?code>category鐩稿悓锛屼篃涓嶄細鍑虹幇涔卞簭闂銆傝繖姝d笌鎴戜滑鏈鍒濈殑瑙e喅鏂规涓鑷淬?/p>

5銆佸皬缁?/h2>

鏈潵閫氳繃瀹炶返涓伓鍙戠殑涓涓潙锛岃亰鍒颁簡Mysql瀵?code>limit鏌ヨ璇彞鐨勪紭鍖栵紝鍚屾椂鎻愪緵浜嗚В鍐虫柟妗堬紝鍗虫弧瓒充簡涓氬姟闇姹傦紝鍙堥伩鍏嶄簡涓氬姟閫昏緫鐨勯敊璇?/p>

寰堝鏈嬪弸閮藉湪浣跨敤order by鍜?code>limit璇彞杩涜鏌ヨ锛屼絾濡傛灉涓嶇煡閬?code>Mysql鐨勮繖浜涗紭鍖栫壒鎬э紝寰堝彲鑳藉凡缁忓叆鍧戯紝鍙笉杩囨暟鎹噺娌℃湁瑙﹀彂鍛堢幇鑰屽凡銆?/p>

鍒版杩欑瘒鍏充簬Mysql鎺掑簭鐨勭壒鎬ц鎯呯殑鏂囩珷灏变粙缁嶅埌杩欎簡,鏇村鐩稿叧Mysql鎺掑簭鐗规у唴瀹硅鎼滅储鑴氭湰涔嬪浠ュ墠鐨勬枃绔犳垨缁х画娴忚涓嬮潰鐨勭浉鍏虫枃绔犲笇鏈涘ぇ瀹朵互鍚庡澶氭敮鎸佽剼鏈箣瀹讹紒