1. 程式人生 > 其它 >mysql中的explain

mysql中的explain

在mysql中優化sql語句的查詢效率時,在開頭加上explain,可以檢查查詢語句中設計到的表資料量,有沒有使用索引等資訊

例:

explain
select a.CATA_ID,a.CATA_CODE,a.CATA_TITLE,a.org_id,a.ORG_NAME,t.city_orgid,t.city_orgname,c.WORKFLOW_ID,c.WORK_NAME,c.CRON_STR,c.TARGET_RESOURCES,d.DB_SCHEMA,d.TABLE_NAME,k.STRING_7,
n.instance_code "schema_name",m.instance_name "ds_user",eo.DICTNAME,eo1.DICTNAME,ot.type
from sip_data_drc.ts_drc_catalog a
left join catalog_res_associated t on a.CATA_ID = t.CATALOG_ID and resource_type = '7'
left join sip_data_drc.ts_drc_catalog_resource d on t.RESOURCE_ID = d.res_id and d.version = '0'
left join sip_data_meta.t_agr_md_instance l on a.CATA_ID = l.STRING_3 and classifier_id = 'Table'
left join sip_data_meta.t_agr_task c on l.INSTANCE_ID = c.TABLE_ID  --and c.work_state in ('0','1','2')
left join sip_data_base.org_cityorg t on a.org_id = t.orgid
left join sip_data_meta.t_md_instance_st k on d.res_id = k.INSTANCE_ID
left join sip_data_meta.t_md_instance_st n on k.PARENT_ID=n.INSTANCE_ID 
left join sip_data_meta.t_md_instance_st m on n.PARENT_ID=m.instance_id
left join sip_data_base.eos_dict_entry eo on eo.DICTTYPEID = 'DRC_RESOURCE_TYPE3' and eo.DICTID = a.cata_type
left join sip_data_base.eos_dict_entry eo1 on eo1.DICTTYPEID = 'CATALOG_STATUS' and eo1.DICTID = a.cata_status
left join sip_data_base.org_task ot on ot.orgname = t.city_orgname
where a.cata_type != '2' and a.cata_type != 'KF'

  上面sql語句執行的結果如下圖:

expain出來的資訊有10列,分別是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

id:選擇識別符號
select_type:表示查詢的型別。
table:輸出結果集的表
partitions:匹配的分割槽
type:表示表的連線型別。常用的型別有:ALL、index、range、 ref、eq_ref、const、system、NULL(從左到右,效能從差到好)
possible_keys:表示查詢時,可能使用的索引
key:表示實際使用的索引
key_len:索引欄位的長度
ref:列與索引的比較
rows:掃描出的行數(估算的行數)
filtered:按表條件過濾的行百分比
Extra:執行情況的描述和說明