? ? ? ? 數據庫優化是一個比較寬泛的概念,涵蓋范圍較廣。大的層面涉及分布式主從、分庫、分表等;小的層面包括連接池使用、復雜查詢與簡單查詢的選擇及是否在應用中做數據整合等;具體到sql語句執行效率則需調整相應查詢字段,條件字段,索引使用等。
對于sql語句執行效率,可以通過數據庫查看sql語句執行計劃來進行優化。
數據庫執行explain 命令,結果如下:
?
?
涉及字段含義:
id:執行順序號,值越大,越先執行
select_type:查詢類型,普通,聯合,子查詢等;
? ? simple:簡單查詢
? ? primary:主查詢
? ? subquery:子查詢
? ? drived(衍生):from 列表中包含的查詢
? ? union:聯合查詢,union之后的
? ? union:聯合查詢的結果查詢
table:涉及的表
type:訪問類型,即數據是怎么獲取到的
? ??system?>?const?>?eq_ref?>?ref?> fulltext > ref_or_null > index_merge > unique_subquery > index_subquery >?range?>?index?>?ALL
? ? const:只需匹配一行數據,如:where primary_key=x
? ? ref:非唯一性索引掃描,匹配多行
? ? range:范圍匹配,如between、in
? ? index:取索引列,從索引文件讀取
? ? all:全表掃描
possible_keys:查詢字段包含的索引
key:使用的索引
key_len:索引中使用的字節數
rows:找到所需的記錄所需要讀取的行數
extra:額外信息
? ??Using temporary:使用臨時表保存中間結果,group by
? ? Using filesort:對數據使用一個外部的索引排序,而不是按照表內的索引進行排序讀取。也就是說mysql無法利用索引完成的排序操作稱為“文件排序”
? ? Using index:使用了覆蓋索引(Covering Index),避免了訪問表的數據行,效率高?
? ??Using where :?表示服務器將存儲引擎返回行后再應用where過濾條件
? ??Impossible WHERE:不可達的查詢
? ? 。。。
?