《簡單MySQL教程三》要點:
本文介紹了簡單MySQL教程三,希望對您有用。如果有疑問,可以聯系我們。
一、性能闡發
1、MySql Query Optimizer
1 )、Mysql中有專門負責優化SELECT語句的優化器模塊,主要功能:通過計算分析系統中收集到的統計信息,為客戶端哀求的Query提供他認為最優的執行計劃(它認為最優的數據檢索方式,但不見得是DBA認為是最優的,這部分最耗費時間)
2) 當客戶端向MySQL 哀求一條Query,命令解析器模塊完成哀求分類,區別出是 SELECT 并轉發給MySQL Query Optimizer時,MySQL Query Optimizer 首先會對整條Query進行優化,處理掉一些常量表達式的預算,直接換算成常量值.并對 Query 中的查詢條件進行簡化和轉換,如去掉一些無用或顯而易見的條件、結構調整等.然后分析 Query 中的 Hint 信息(如果有),看顯示Hint信息是否可以完全確定該Query 的執行計劃.如果沒有 Hint 或Hint 信息還不足以完全確定執行計劃,則會讀取所涉及對象的統計信息,根據 Query 進行寫相應的計算分析,然后再得出最后的執行計劃.
2、MySQL常見瓶頸
CPU:CPU在飽和的時候一般產生在數據裝入內存或從磁盤上讀取數據時候
IO:磁盤I/O瓶頸產生在裝入數據遠大于內存容量的時候
二、explain癥結字
1、explain是什么
使用EXPLAIN關鍵字可以模擬優化器執行SQL語句,從而知道MySQL是如何處理你的SQL語句.分析你的查詢語句或是表布局的性能瓶頸.
2、explain做什么
可以查看以下內容:
表的讀取次序
數據讀取操作的操作類型
哪些索引可以被使用
哪些索引被現實使用
表之間的引用
每張表有若干行被優化器查詢
3、explain怎樣用
執行Explain + sql語句可以查看一下內容
4、各字段解釋
id
select查詢的序列號,包括一組數字,表示查詢中執行select子句或操作表的順序,數字相同的從上到下依次執行,不同的數字大的優先執行.
select_type
查詢的類型,主要用于區別普通查詢,聯合查詢,子查詢等繁雜查詢.主要有以下6種
SIMPLE:簡單的 select 查詢,查詢中不包括子查詢或者UNION
PRIMARY:查詢中若包括任何復雜的子部分,最外層查詢則被標記為
SUBQUERY:在SELECT或WHERE列表中包括了子查詢
DERIVED:在FROM列表中包括的子查詢被標記為DERIVED(衍生)MySQL會遞歸執行這些子查詢, 把結果放在臨時表里.
UNION:若第二個SELECT出現在UNION之后,則被標記為UNION;若UNION包括在FROM子句的子查詢中,外層SELECT將被標記為:DERIVED
UNION RESULT:從UNION表獲取成果的SELECT
table
顯示這一行數據來自哪一張表
type
表示拜訪類型,從最好到最壞依次為system const eq_ref ref fulltext ref_or_null index_merge unique_subquery index_subquery range index ALL
一般來說至少要到達range級別.
possible_keys
顯示可能應用在這張表中的索引,一個或多個.查詢涉及到的字段上若存在索引,則該索引將被列出,但不必定被查詢實際使用
key
實際使用的索引.如果為NULL,則沒有使用索引.查詢中若使用了籠罩索引,則該索引和查詢的select字段重疊
key_len
表現索引中使用的字節數,可通過該列計算查詢中使用的索引的長度.在不損失精確性的情況下,長度越短越好
key_len顯示的值為索引字段的最年夜可能長度,并非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的
ref
顯示索引的哪一列被使用了,假如可能的話,是一個常數.哪些列或常量被用于查找索引列上的值
rows
根據表統計信息及索引選用情況,大致估算出找到所需的記錄所必要讀取的行數
Extra
包括以下內容:
5、舉例闡發
第一行(執行順序4):id列為1,表示是union里的第一個select,select_type列的primary表 示該查詢為外層查詢,table列被標志為derived3,表示查詢結果來自一個衍生表,其中derived3中3代表該查詢衍生自第三個select查詢,即id為3的select.【select d1.name......】
第二行(執行順序2):id為3,是整個查詢中第三個select的一部分.因查詢包括在from中,所以為derived.【select id,name from t1 where other_column=''】
第三行(執行次序3):select列表中的子查詢select_type為subquery,為整個查詢中的第二個select.【select id from t3】
第四行(執行順序1):select_type為union,闡明第四個select是union里的第二個select,最先執行【select name,id from t2】
第五行(執行順序5):代表從union的臨時表中讀取行的階段,table列的union1,4表現用第一個和第四個select的結果進行union操作.【兩個結果union操作】
教程四會出怎樣樣優化索引和避免索引失效
《簡單MySQL教程三》是否對您有啟發,歡迎查看更多與《簡單MySQL教程三》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7094.html