91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL 5.7 ORDER BY排序的優化是怎樣的

發布時間:2021-10-25 15:34:14 來源:億速云 閱讀:209 作者:柒染 欄目:MySQL數據庫

這篇文章將為大家詳細講解有關MySQL 5.7 ORDER BY排序的優化是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

在一些情況下,MySQL可以使用索引而無需額外的排序來執行ORDER BY排序。
即使ORDER BY沒有匹配上指定的索引,也可以使用索引,只要所有未使用索引部分和所有ORDER BY字段是WHERE語句的常數。

SELECT * FROM t1
  ORDER BY key_part1,key_part2,... ;

SELECT * FROM t1
  WHERE key_part1 = constant ORDER BY key_part2;

SELECT * FROM t1
  ORDER BY key_part1 DESC, key_part2 DESC;

SELECT * FROM t1
  WHERE key_part1 = 1
  ORDER BY key_part1 DESC, key_part2 DESC;

SELECT * FROM t1
  WHERE key_part1 > constant ORDER BY key_part1 ASC;

SELECT * FROM t1
  WHERE key_part1 < constant ORDER BY key_part1 DESC;

SELECT * FROM t1
  WHERE key_part1 = constant1 AND key_part2 > constant2 ORDER BY key_part2;

在某些情況下,MySQL不會使用索引進行排序

查詢使用多個不同的索引進行排序

SELECT * FROM t1 ORDER BY key1, key2;

查詢在索引的非連續部分上使用排序

SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;

排序中既有ASC又有DESC

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

用于獲取數據的索引不同于ORDER BY排序的索引

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

查詢使用表達式進行排序,而不是使用索引的字段名進行排序

SELECT * FROM t1 ORDER BY ABS(key);
SELECT * FROM t1 ORDER BY -key;

查詢關聯了許多表,并且ORDER BY使用的字段不是返回行的第一個非常量表中的字段(在EXPLAIN執行計劃輸出中第一個表的連接類型不是const)

查詢使用不同的ORDER BY和GROUP BY表達式

在排序中只使用了一個字段的前綴索引

索引沒有按照順序存儲行,例如MEMORY表的HASH索引

如果一個查詢包含GROUP BY,但是你不想將查詢結果排序,可以通過ORDER BY NULL語句來取消排序

INSERT INTO foo
SELECT a, COUNT(*) FROM bar GROUP BY a ORDER BY NULL;

與提升ORDER BY速度相關的系統參數:

增加sort_buffer_size參數的值。理想狀況下,這個參數的值應該足夠大,可以將整個結果集放入到sort buffer中,避免到磁盤中進行排序。

存儲在緩沖區的列值的大小是由max_sort_length參數決定的。

想要監控排序在磁盤上的合并數量,可以通過觀察Sort_merge_passes這個狀態參數。
mysql> show global status like 'Sort_merge_passes';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Sort_merge_passes | 0     |
+-------------------+-------+
1 row in set (0.11 sec)

增加read_rnd_buffer_size參數的值。

定義列的時候,僅分配它們需要的值,這樣每行在排序時可以使用更少的內存。例如,如果每列的值不超過16個字符,CHAR(16)比CHAR(200)更好。

改變tmpdir系統變量,將其指向一個專用的大容量的文件系統目錄。

如果ORDER BY排序沒有使用索引,但是語句中帶有LIMIT語句,優化器可能會避免使用合并文件而是在內存中進行排序。

關于MySQL 5.7 ORDER BY排序的優化是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰城市| 云梦县| 若尔盖县| 丽水市| 武胜县| 华阴市| 运城市| 家居| 鞍山市| 天峻县| 宣汉县| 台州市| 磴口县| 乐山市| 浦江县| 合作市| 正蓝旗| 祁门县| 通许县| 陕西省| 沙河市| 沂南县| 全州县| 临夏县| 屏东县| 平泉县| 乌兰察布市| 莲花县| 厦门市| 浦东新区| 闽侯县| 玛纳斯县| 楚雄市| 喜德县| 沾益县| 柳河县| 时尚| 寿光市| 潍坊市| 吴旗县| 常山县|