MySQL查詢語句過程和EXPLAIN語句的基本概念及其最佳化
今日,要跟大家介紹的是MySQL查詢語句過程和explain語句的基本概念及最佳化,小杜覺得很實用,因此,整理了一下並分享給大家做個參考,由於內容簡單清晰,易於學習和理解,感興趣的朋友不妨來看看!
網站或服務的效能關鍵點很大程度在於資料庫的設計(假設你選擇了合適的語言開發框架)以及如何查詢資料上。
我們知道MySQL的效能最佳化方法,一般有建立索引、規避複雜聯合查詢、設定冗餘欄位、建立中間表、查詢快取等,也知道用EXPLAIN來檢視執行計劃。
但對MySQL複雜查詢語句執行過程和內部機制,MySQL Optimizer本身所做最佳化以及查詢語句調整對效能所產生的影響及其原因知之甚少。
本文試圖對其中的一些關鍵概念如執行過程、索引使用等做比較深入的探討,知其然,知其所以然,
這樣可以避免在原本透過MySQL簡單最佳化就能獲得很好效果的情況下,盲目跟風轉向NoSQL儲存或者投入資金升級基礎設施。
工欲善其事,必先利其器,這裡首先介紹MySQL查詢語句效能分析工具。
MySQL的EXPLAIN命令是用來分析查詢效能的工具,EXPLAIN的輸出每一行對應於查詢語句中的一張表的執行計劃說明,其輸出列含義如下表:
上表中type列是表關聯型別,常見的有如下型別(按關聯查詢效率從高到低排列):
const(常量連線),比如SELECT * FROM user WHERE id=1; eq_ref(等值引用),比如SELECT * FROM user,card WHERE user.id=card.userid; ref(引用),用於非唯一索引,比如SELECT * FROM user,card WHERE user.last_name=’test’; range(範圍),比如SELECT * FROM tbl_name WHERE key_column > 10; index(索引),根據索引來讀取資料,如果索引已包含了查詢資料,只需掃描索引樹,否則執行全表掃描和All類似; ALL(所有),全表掃描
key列代表索引(index),rows表示估計會掃描多少行記錄,
Extra表示附加資訊,常見的有如下幾種(也按查詢效率從高到低排列):
Using index:表示使用索引,如果同時出現Using where,代表使用索引來查詢讀取記錄,如果沒有Using where,表示索引包含查詢資料,無需額外的查詢; Using where:表示條件查詢,如果type列是ALL或index,而沒有出現該資訊,則你有可能在執行錯誤的查詢:返回所有資料; Using filesort:不是“使用檔案索引”的含義!filesort是MySQL所實現的一種排序策略,通常在使用到排序語句ORDER BY的時候,會出現該資訊; Using temporary:表示為了得到結果,使用了臨時表,這通常是出現在多表聯合查詢,結果排序的場合;
如果EXPLAIN出現後面兩個資訊(Using filesort,Using temporary),而rows又比較大,通常意味著你需要調整查詢語句,或者需要新增索引,總之需要儘量消除這兩個資訊。
下面給出EXPLAIN結果例項(從使用者檔案表中找出暱稱和性別,按使用者表中的使用者關注者數量排序):
到此,關於“MySQL查詢語句過程和EXPLAIN語句的基本概念及其最佳化”的內容就介紹完畢,相信大家看完之後有更深的瞭解,如果大家還想學習更多相關知識,可以關注摩杜雲行業資訊頻道,更多相關知識等著你來學習,感謝各位的閱讀!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996141/viewspace-2790325/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 查詢語句執行過程淺析MySql
- mysql查詢語句MySql
- Mysql之查詢語句MySql
- mysql查詢語句集MySql
- MySQL(十四)分析查詢語句Explain 七千字總結MySqlAI
- MySQL 的 EXPLAIN 語句及用法MySqlAI
- MySQL中explain語句的使用MySqlAI
- MySQL的簡單查詢語句MySql
- mysql dba常用的查詢語句MySql
- mysql高階查詢語句MySql
- MySQL系列之一條SQL查詢語句的執行過程MySql
- GaussDB SQL查詢語句執行過程解析SQL
- mysql查詢語句5:連線查詢MySql
- mysql查詢效率慢的SQL語句MySql
- MySQL內連線查詢語句MySql
- mysql執行sql語句過程MySql
- golang通過mysql語句實現分頁查詢GolangMySql
- golang透過mysql語句實現分頁查詢GolangMySql
- MySQL語句第二高的薪水查詢MySql
- 在mysql查詢效率慢的SQL語句MySql
- 請教一個mysql查詢語句!!MySql
- mysql中一條查詢語句的執行全過程是怎樣的?MySql
- 【MySQL】MySQL語句最佳化MySql
- ORACLE 資料庫 查詢語句與DML語句Oracle資料庫
- mysql常見的查詢語句的應用MySql
- MySQL儲存過程語句及呼叫MySql儲存過程
- SQL mother查詢語句SQL
- sql查詢語句流程SQL
- SQL查詢語句 (Oracle)SQLOracle
- Mysql 獲取表設計查詢語句MySql
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- mysql 語句如何最佳化MySql
- MySQL 查詢常用操作(0) —— 查詢語句的執行順序MySql
- 多表查詢建表語句
- Laravel 子查詢語句用法Laravel
- 資料庫查詢語句資料庫
- MySQL資料庫:7、SQL常用查詢語句MySql資料庫
- mysql查詢語句陣列下標擷取MySql陣列