在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ Mysql里explain中的const 類型究竟是個(gè)什么概念,和eq_ref究

Mysql里explain中的const 類型究竟是個(gè)什么概念,和eq_ref究竟什么區(qū)別?

const :通常情況下,如果將一個(gè)主鍵放置到where后面作為條件查詢,mysql優(yōu)化器就能把這次查詢優(yōu)化轉(zhuǎn)化為一個(gè)常量。至于如何轉(zhuǎn)化以及何時(shí)轉(zhuǎn)化,這個(gè)取決于優(yōu)化器。

這個(gè)和eq_ref究竟有何區(qū)別?

回答
編輯回答
萢萢糖

以下全部詳細(xì)解析explain各個(gè)屬性含義:

????clipboard.png

????各屬性含義:
????id: 查詢的序列號(hào)
????select_type: 查詢的類型,主要是區(qū)別普通查詢和聯(lián)合查詢、子查詢之類的復(fù)雜查詢

  • SIMPLE:查詢中不包含子查詢或者UNION
  • 查詢中若包含任何復(fù)雜的子部分,最外層查詢則被標(biāo)記為:PRIMARY
  • SELECTWHERE列表中包含了子查詢,該子查詢被標(biāo)記為:SUBQUERY

????table: 輸出的行所引用的表
????type: 訪問(wèn)類型
????clipboard.png

????從左至右,性能由差到好

  1. ALL: 掃描全表
  2. index: 掃描全部索引樹(shù)
  3. range: 掃描部分索引,索引范圍掃描,對(duì)索引的掃描開(kāi)始于某一點(diǎn),返回匹配值域的行,常見(jiàn)于between、<、>等的查詢
  4. ref: 使用非唯一索引或非唯一索引前綴進(jìn)行的查找
    eq_ref和const的區(qū)別:
  5. eq_ref:唯一性索引掃描,對(duì)于每個(gè)索引鍵,表中只有一條記錄與之匹配。常見(jiàn)于主鍵或唯一索引掃描
  6. const, system: 單表中最多有一個(gè)匹配行,查詢起來(lái)非常迅速,例如根據(jù)主鍵或唯一索引查詢。system是const類型的特例,當(dāng)查詢的表只有一行的情況下, 使用system。
  7. NULL: 不用訪問(wèn)表或者索引,直接就能得到結(jié)果,如select 1 from test where 1

????possible_keys: 表示查詢時(shí)可能使用的索引。如果是空的,沒(méi)有相關(guān)的索引。這時(shí)要提高性能,可通過(guò)檢驗(yàn)WHERE子句,看是否引用某些字段,或者檢查字段不是適合索引

????key: 顯示MySQL實(shí)際決定使用的索引。如果沒(méi)有索引被選擇,是NULL

????key_len: 使用到索引字段的長(zhǎng)度

????注:key_len顯示的值為索引字段的最大可能長(zhǎng)度,并非實(shí)際使用長(zhǎng)度,即key_len是根據(jù)表定義計(jì)算而得,不是通過(guò)表內(nèi)檢索出的。

????ref: 顯示哪個(gè)字段或常數(shù)與key一起被使用

????rows: 這個(gè)數(shù)表示mysql要遍歷多少數(shù)據(jù)才能找到,表示MySQL根據(jù)表統(tǒng)計(jì)信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數(shù),在innodb上可能是不準(zhǔn)確的

????Extra: 執(zhí)行情況的說(shuō)明和描述。包含不適合在其他列中顯示但十分重要的額外信息。

  1. Using index:表示使用索引,如果只有 Using index,說(shuō)明他沒(méi)有查詢到數(shù)據(jù)表,只用索引表就完成了這個(gè)查詢,這個(gè)叫覆蓋索引。
  2. Using where:表示條件查詢,如果不讀取表的所有數(shù)據(jù),或不是僅僅通過(guò)索引就可以獲取所有需要的數(shù)據(jù),則會(huì)出現(xiàn) Using where。
2017年1月21日 16:29
編輯回答
念舊

簡(jiǎn)單地說(shuō)是const是直接按主鍵或唯一鍵讀取,eq_ref用于聯(lián)表查詢的情況,按聯(lián)表的主鍵或唯一鍵聯(lián)合查詢。

下面的內(nèi)容翻譯自官方方檔

const
該表最多有一個(gè)匹配行, 在查詢開(kāi)始時(shí)讀取。由于只有一行, 因此該行中列的值可以被優(yōu)化器的其余部分視為常量。const 表非常快, 因?yàn)樗鼈冎蛔x一次。

const用于將 "主鍵" 或 "唯一" 索引的所有部分與常量值進(jìn)行比較。在下面的查詢中, tbl_name 可以用作 const 表:

SELECT * FROM tbl_name WHERE primary_key=1;

SELECT * FROM tbl_name
  WHERE primary_key_part1=1 AND primary_key_part2=2;

eq_ref

讀取本表中和關(guān)聯(lián)表表中的每行組合成的一行。除 了 system 和 const 類型之外, 這是最好的聯(lián)接類型。當(dāng)連接使用索引的所有部分時(shí), 索引是主鍵或唯一非 NULL 索引時(shí), 將使用該值。
eq_ref 可用于使用 = 運(yùn)算符比較的索引列。比較值可以是常量或使用此表之前讀取的表中的列的表達(dá)式。在下面的示例中, MySQL 可以使用 eq_ref 連接(join)ref_table來(lái)處理:

SELECT * FROM ref_table,other_table
  WHERE ref_table.key_column=other_table.column;

SELECT * FROM ref_table,other_table
  WHERE ref_table.key_column_part1=other_table.column
  AND ref_table.key_column_part2=1;



2017年10月4日 11:59