久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何優化SQL

134次閱讀
沒有評論

共計 1939 個字符,預計需要花費 5 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章主要介紹了如何優化 SQL,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

簡介

雖然使用 Explain 不能夠馬上調優我們的 SQL,它也不能給予我們一些調整建議,但是它能夠讓我們了解 MySQL 優化器是如何執行 SQL 語句的

通過 Explain,我們可以分析出以下結果:

表的讀取順序

數據讀取操作的操作類型

哪些索引可以使用

哪些索引被實際使用

表之間的引用

每張表有多少行被優化器查詢

Explain 命令的用法十分簡單, 在 select 語句前加上 Explain 就可以了, 例如:

explain select * from user;

它的結果主要包含以下字段

id、select_type、table、partitions、type、possible_keys、key、ref、rows、filtered、extra

接下來我們來看一下各個字段的含義

id 查詢序列號

加載表的順序

如何優化 SQL

連接查詢各個表的加載順序是相同的,所以都為 1

如何優化 SQL

包含子查詢的時候,先執行子查詢,所以 user 表的 id 值最大

select_type 查詢類型

常用取值有:

SIMPLE:簡單的 select 查詢,不包含子查詢和索引

PRIMARY:查詢中若包含任何子查詢,最外層查詢則為記為 PRIMARY

SUBQUERY:在 SELECT 或 WHERE 列表中包含了子查詢

DERIVED:在 FROM 列表中包含的子查詢被標記為 DERIVED(衍生),MySQL 會遞歸執行這些子查詢,把結果放在臨時表中

UNION:若第二個 SELECT 出現在索引之后,則被標記為 UNION:若索引包含在 FROM 子句的子查詢中,外層 SELECT 將被標記為:DERIVED

UNION RESULT:從索引表獲取結果的查詢

table 查詢涉及的表或衍生表

type 查詢類型

通過 type 字段, 我們可以判斷此次查詢是全表掃描還是索引掃描等,type 常用的取值有:

system:表只有一條數據

const:針對主鍵或唯一索引的等值查詢掃描, 簡單理解為一次讀取就獲取到了數據,例如下面這個主鍵索引的查詢

如何優化 SQL

eq_ref:唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或唯一索引掃描

ref:非唯一性索引掃描,返回匹配某個單獨值的所有行

range:表示使用索引范圍查詢,例如 =、、、=、、=、IS、NULL、=、BETWEEN、IN 等

index: 所要查詢的數據直接在索引樹中就可以獲取到, 而不需要掃描數據,例如:

如何優化 SQL

ALL: 表示全表掃描, 這個類型的查詢是性能最差的查詢

type 類型的性能比較

通常來說, 不同的 type 類型的性能關系如下:

ALL index range ref eq_ref const system

possible_keys 查詢時能夠使用到的索引.

possible_keys 表示 MySQL 在查詢時, 能夠使用到的索引. 注意并不是一定用,實際使用是由 由 key 字段決定

key 查詢使用的索引

此字段是 MySQL 在當前查詢時所真正使用到的索引.

key_len 使用索引的字節數

這個字段可以評估組合索引是否完全被使用, 或只有最左部分字段被使用到.

rows MySQL 估算要查找到結果集需要掃描讀取的數據行數

Extra 額外的信息

常見的有以下幾種內容:

Using filesort:MySQL 需額外的排序操作, 不能通過索引順序達到排序效果. 一般有 Using filesort, 都建議優化去掉, 因為這樣的查詢 CPU 資源消耗大.

Using index:表示查詢在索引樹中就可查找所需數據, 不用掃描表數據文件, 往往說明性能不錯

Using temporary:查詢有使用臨時表, 一般出現于排序, 分組和多表 join 的情況, 查詢效率不高, 建議優化.

Using where:表明使用了 where 過濾

Using join buffer:表明使用了連接緩存, 比如說在查詢的時候,多表 join 的次數非常多,那么將配置文件中的緩沖區的 join buffer 調大一些

impossible where:where 子句的值總是 false,不能用來獲取任何元組

select tables optimized away:在沒有 GROUPBY 子句的情況下,基于索引優化 MIN/MAX 操作或者對于 MyISAM 存儲引擎優化 COUNT(*) 操作,不必等到執行階段再進行計算,查詢執行計劃生成的階段即完成優化

distinct:優化 distinct 操作,在找到第一匹配的元組后即停止找同樣值的動作

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“如何優化 SQL”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計1939字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 杨浦区| 厦门市| 连江县| 潮安县| 清苑县| 丽水市| 合肥市| 张家港市| 江阴市| 将乐县| 雷波县| 鹰潭市| 社会| 桦川县| 噶尔县| 大庆市| 麦盖提县| 日照市| 南川市| 共和县| 安福县| 青岛市| 定边县| 贵南县| 甘谷县| 天祝| 托克托县| 彭泽县| 抚宁县| 昌黎县| 湟中县| 西昌市| 防城港市| 怀集县| 明溪县| 永寿县| 习水县| 平遥县| 弥渡县| 无锡市| 乃东县|