欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL查詢語句過程和EXPLAIN語句基本概念及其優(yōu)化

 更新時間:2019年05月21日 14:40:51   作者:陳小峰_iefreer  
在MySQL中我們經常會使用到一些查詢語句,如果使用合適的索引會大大簡化和加速查找,下面小編來和大家一起學習一下知識

網站或服務的性能關鍵點很大程度在于數據庫的設計(假設你選擇了合適的語言開發(fā)框架)以及如何查詢數據上。

我們知道MySQL的性能優(yōu)化方法,一般有建立索引、規(guī)避復雜聯(lián)合查詢、設置冗余字段、建立中間表、查詢緩存等,也知道用EXPLAIN來查看執(zhí)行計劃。

但對MySQL復雜查詢語句執(zhí)行過程和內部機制,MySQL Optimizer本身所做優(yōu)化以及查詢語句調整對性能所產生的影響及其原因知之甚少。

本文試圖對其中的一些關鍵概念如執(zhí)行過程、索引使用等做比較深入的探討,知其然,知其所以然,

這樣可以避免在原本通過MySQL簡單優(yōu)化就能獲得很好效果的情況下,盲目跟風轉向NoSQL存儲或者投入資金升級基礎設施。

工欲善其事,必先利其器,這里首先介紹MySQL查詢語句性能分析工具。

MySQL的EXPLAIN命令是用來分析查詢性能的工具,EXPLAIN的輸出每一行對應于查詢語句中的一張表的執(zhí)行計劃說明,其輸出列含義如下表:

上表中type列是表關聯(lián)類型,常見的有如下類型(按關聯(lián)查詢效率從高到低排列):

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(索引),根據索引來讀取數據,如果索引已包含了查詢數據,只需掃描索引樹,否則執(zhí)行全表掃描和All類似;
ALL(所有),全表掃描

key列代表索引(index),rows表示估計會掃描多少行記錄,

Extra表示附加信息,常見的有如下幾種(也按查詢效率從高到低排列):

Using index:表示使用索引,如果同時出現Using where,代表使用索引來查找讀取記錄,如果沒有Using where,表示索引包含查詢數據,無需額外的查找;
Using where:表示條件查詢,如果type列是ALL或index,而沒有出現該信息,則你有可能在執(zhí)行錯誤的查詢:返回所有數據;
Using filesort:不是“使用文件索引”的含義!filesort是MySQL所實現的一種排序策略,通常在使用到排序語句ORDER BY的時候,會出現該信息;
Using temporary:表示為了得到結果,使用了臨時表,這通常是出現在多表聯(lián)合查詢,結果排序的場合;

如果EXPLAIN出現后面兩個信息(Using filesort,Using temporary),而rows又比較大,通常意味著你需要調整查詢語句,或者需要添加索引,總之需要盡量消除這兩個信息。

下面給出EXPLAIN結果實例(從用戶檔案表中找出昵稱和性別,按用戶表中的用戶關注者數量排序):

上面的查詢語句就是典型的問題案例,Using filesort和Using temporary的具體含義以及如何優(yōu)化上述語句放在下一篇文章中結合查詢過程和原理來專門討論。

以上就是本篇文章的全部內容了,希望對各位有所幫助。如果大家還有其他方面的問題,可以留言交流,請持續(xù)關注腳本之家!

相關文章

  • MySQL數據庫表的合并及分區(qū)方式

    MySQL數據庫表的合并及分區(qū)方式

    這篇文章主要介紹了MySQL數據庫表的合并及分區(qū)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 用HAProxy來檢測MySQL復制的延遲的教程

    用HAProxy來檢測MySQL復制的延遲的教程

    這篇文章主要介紹了用HAProxy來檢測MySQL復制的延遲的教程,HAProxy需要使用到PHP腳本,需要的朋友可以參考下
    2015-04-04
  • MySQL索引最左匹配原則實例詳解

    MySQL索引最左匹配原則實例詳解

    最左匹配原則就是指在聯(lián)合索引中,如果你的SQL語句中用到了聯(lián)合索引中的最左邊的索引,那么這條SQL語句就可以利用這個聯(lián)合索引去進行匹配,下面這篇文章主要給大家介紹了關于MySQL索引最左匹配原則的相關資料,需要的朋友可以參考下
    2022-09-09
  • MySQL?數據庫的約束及數據表的設計原理

    MySQL?數據庫的約束及數據表的設計原理

    這篇文章主要介紹了MySQL?數據庫的約束及數據表的設計原理,數據庫中的約束即是對插入數據庫中的數據進行限定,為了保證數據的有效性和完整性,下面一起來了解具體的詳細內容,需要的小伙伴可以參考一下
    2021-12-12
  • 一文帶你將csv文件導入到mysql數據庫(親測有效)

    一文帶你將csv文件導入到mysql數據庫(親測有效)

    一直不大懂csv怎么通過mysql圖形化的界面直接導入,看了很多帖,才覺得自己會了,下面這篇文章主要給大家介紹了關于將csv文件導入到mysql數據庫的相關資料,需要的朋友可以參考下
    2022-08-08
  • mysql 提示INNODB錯誤的解決方法

    mysql 提示INNODB錯誤的解決方法

    解決The‘InnoDB’feature is disabled; you need MySQL built with ‘InnoDB’ to have it
    2011-09-09
  • MySQL系列多表連接查詢92及99語法示例詳解教程

    MySQL系列多表連接查詢92及99語法示例詳解教程

    這篇文章主要為大家介紹了MySQL系列多表連接查詢92及99語法示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-10-10
  • MySQL的子查詢及相關優(yōu)化學習教程

    MySQL的子查詢及相關優(yōu)化學習教程

    這篇文章主要介紹了MySQL的子查詢及相關優(yōu)化學習教程,使用子查詢時需要注意其對數據庫性能的影響,需要的朋友可以參考下
    2015-11-11
  • MySQL 視圖 第1349號錯誤解決方法

    MySQL 視圖 第1349號錯誤解決方法

    把下面SQL里的SELECT單獨執(zhí)行,沒有問題,但是用來CREATE VIEW 就報錯了.
    2008-03-03
  • mysql 索引分類以及用途分析

    mysql 索引分類以及用途分析

    MySQL索引分為普通索引、唯一性索引、全文索引、單列索引、多列索引等等。這里將為大家介紹著幾種索引各自的用途。
    2011-08-08

最新評論