自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL數(shù)據(jù)庫(kù)中EXPLAIN的使用及其注意事項(xiàng)詳解

數(shù)據(jù)庫(kù) MySQL
本文我們主要介紹了MySQL數(shù)據(jù)庫(kù)中EXPLAIN的使用方法,以及使用時(shí)的一些注意事項(xiàng),希望能夠?qū)δ兴鶐椭?/div>

MySQL數(shù)據(jù)庫(kù)中EXPLAIN的使用及其注意事項(xiàng)是本文我們主要要介紹的內(nèi)容,接下來(lái)就讓我們一起來(lái)了解一下這部分內(nèi)容吧。

1、EXPLAIN tbl_name EXPLAIN tbl_name是DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name的一個(gè)同義詞。

2、EXPLAIN [EXTENDED] SELECT select_options 如果在SELECT語(yǔ)句前放上關(guān)鍵詞EXPLAIN,MySQL將解釋它如何處理SELECT,提供有關(guān)表如何聯(lián)接和聯(lián)接的次序。 借助于EXPLAIN,可以知道什么時(shí)候必須為表加入索引以得到一個(gè)使用索引來(lái)尋找記錄的更快的SELECT。

還可以知道優(yōu)化器是否以一個(gè)***次序聯(lián)接表。為了強(qiáng)制優(yōu)化器讓一個(gè)SELECT語(yǔ)句按照表命名順序的聯(lián)接次序,語(yǔ)句應(yīng)以STRAIGHT_JOIN而不只是SELECT開(kāi)頭。

EXPLAIN為用于SELECT語(yǔ)句中的每個(gè)表返回一行信息。表以它們?cè)谔幚聿樵冞^(guò)程中將被MySQL讀入的順序被列出。MySQL用一遍掃描多次聯(lián)接(single-sweep multi-join)的方式解決所有聯(lián)接。這意味著MySQL從***個(gè)表中讀一行,然后找到在第二個(gè)表中的一個(gè)匹配行,然后在第3個(gè)表中等等。當(dāng)所有的表處理完后,它輸出選中的列并且返回表清單直到找到一個(gè)有更多的匹配行的表。從該表讀入下一行并繼續(xù)處理下一個(gè)表。

當(dāng)使用EXTENDED關(guān)鍵字時(shí),EXPLAIN產(chǎn)生附加信息,可以用SHOW WARNINGS瀏覽。該信息顯示優(yōu)化器限定SELECT語(yǔ)句中的表和列名,重寫(xiě)并且執(zhí)行優(yōu)化規(guī)則后SELECT語(yǔ)句是什么樣子,并且還可能包括優(yōu)化過(guò)程的其它注解。

EXPLAIN的每個(gè)輸出行提供一個(gè)表的相關(guān)信息,并且每個(gè)行包括下面的列:

id:SELECT識(shí)別符。這是SELECT的查詢序列號(hào)。

select_type:SELECT類型。

1、SIMPLE: 簡(jiǎn)單SELECT(不使用UNION或子查詢)

2、PRIMARY: 最外面的SELECT

3、UNION:UNION中的第二個(gè)或后面的SELECT語(yǔ)句

4、DEPENDENT UNION:UNION中的第二個(gè)或后面的SELECT語(yǔ)句,取決于外面的查詢

5、UNION RESULT:UNION的結(jié)果

6、SUBQUERY:子查詢中的***個(gè)SELECT

7、DEPENDENT SUBQUERY:子查詢中的***個(gè)SELECT,取決于外面的查詢

8、DERIVED:導(dǎo)出表的SELECT(FROM子句的子查詢)

table:表名

type:聯(lián)接類型

1、system:表僅有一行(=系統(tǒng)表)。這是const聯(lián)接類型的一個(gè)特例。

2、const:表最多有一個(gè)匹配行,它將在查詢開(kāi)始時(shí)被讀取。因?yàn)閮H有一行,在這行的列值可被優(yōu)化器剩余部分認(rèn)為是常數(shù)。const用于用常數(shù)值比較PRIMARY KEY或UNIQUE索引的所有部分時(shí)。

3、eq_ref:對(duì)于每個(gè)來(lái)自于前面的表的行組合,從該表中讀取一行。這可能是***的聯(lián)接類型,除了const類型。它用在一個(gè)索引的所有部分被聯(lián)接使用并且索引是UNIQUE或PRIMARY KEY。eq_ref可以用于使用= 操作符比較的帶索引的列。比較值可以為常量或一個(gè)使用在該表前面所讀取的表的列的表達(dá)式。

4、ref:對(duì)于每個(gè)來(lái)自于前面的表的行組合,所有有匹配索引值的行將從這張表中讀取。如果聯(lián)接只使用鍵的最左邊的前綴,或如果鍵不是UNIQUE或PRIMARY KEY(換句話說(shuō),如果聯(lián)接不能基于關(guān)鍵字選擇單個(gè)行的話),則使用ref。如果使用的鍵僅僅匹配少量行,該聯(lián)接類型是不錯(cuò)的。ref可以用于使用=或<=>操作符的帶索引的列。

5、ref_or_null:該聯(lián)接類型如同ref,但是添加了MySQL可以專門(mén)搜索包含NULL值的行。在解決子查詢中經(jīng)常使用該聯(lián)接類型的優(yōu)化。

6、index_merge:該聯(lián)接類型表示使用了索引合并優(yōu)化方法。在這種情況下,key列包含了使用的索引的清單,key_len包含了使用的索引的最長(zhǎng)的關(guān)鍵元素。

7、unique_subquery:該類型替換了下面形式的IN子查詢的ref:value IN (SELECT primary_key FROMsingle_table WHERE some_expr);unique_subquery是一個(gè)索引查找函數(shù),可以完全替換子查詢,效率更高。

8、index_subquery:該聯(lián)接類型類似于unique_subquery??梢蕴鎿QIN子查詢,但只適合下列形式的子查詢中的非唯一索引:value IN(SELECT key_column FROM single_table WHERE some_expr)

9、 range:只檢索給定范圍的行,使用一個(gè)索引來(lái)選擇行。key列顯示使用了哪個(gè)索引。key_len包含所使用索引的最長(zhǎng)關(guān)鍵元素。在該類型中ref列為NULL。當(dāng)使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比較關(guān)鍵字列時(shí),可以使用range

10、index:該聯(lián)接類型與ALL相同,除了只有索引樹(shù)被掃描。這通常比ALL快,因?yàn)樗饕募ǔ1葦?shù)據(jù)文件小。

11、all:對(duì)于每個(gè)來(lái)自于先前的表的行組合,進(jìn)行完整的表掃描。如果表是***個(gè)沒(méi)標(biāo)記const的表,這通常不好,并且通常在它情況下很差。通??梢栽黾痈嗟乃饕灰褂肁LL,使得行能基于前面的表中的常數(shù)值或列值被檢索出。

possible_keys:possible_keys列指出MySQL能使用哪個(gè)索引在該表中找到行。注意,該列完全獨(dú)立于EXPLAIN輸出所示的表的次序。這意味著在possible_keys中的某些鍵實(shí)際上不能按生成的表次序使用。

key:key列顯示MySQL實(shí)際決定使用的鍵(索引)。如果沒(méi)有選擇索引,鍵是NULL。要想強(qiáng)制MySQL使用或忽視possible_keys列中的索引,在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

key_len:key_len列顯示MySQL決定使用的鍵長(zhǎng)度。如果鍵是NULL,則長(zhǎng)度為NULL。注意通過(guò)key_len值我們可以確定MySQL將實(shí)際使用一個(gè)多部關(guān)鍵字的幾個(gè)部分。

ref:ref列顯示使用哪個(gè)列或常數(shù)與key一起從表中選擇行。

rows:rows列顯示MySQL認(rèn)為它執(zhí)行查詢時(shí)必須檢查的行數(shù)。

Extra:該列包含MySQL解決查詢的詳細(xì)信息。

1、Distinct:MySQL發(fā)現(xiàn)第1個(gè)匹配行后,停止為當(dāng)前的行組合搜索更多的行。

2、Not exists:MySQL能夠?qū)Σ樵冞M(jìn)行LEFT JOIN優(yōu)化,發(fā)現(xiàn)1個(gè)匹配LEFT JOIN標(biāo)準(zhǔn)的行后,不再為前面的的行組合在該表內(nèi)檢查更多的行。

3、range checked for each record (index map: #):MySQL沒(méi)有發(fā)現(xiàn)好的可以使用的索引,但發(fā)現(xiàn)如果來(lái)自前面的表的列值已知,可能部分索引可以使用。對(duì)前面的表的每個(gè)行組合,MySQL檢查是否可以使用range或index_merge訪問(wèn)方法來(lái)索取行。

4、Using filesort:MySQL需要額外的一次傳遞,以找出如何按排序順序檢索行。通過(guò)根據(jù)聯(lián)接類型瀏覽所有行并為所有匹配WHERE子句的行保存排序關(guān)鍵字和行的指針來(lái)完成排序。然后關(guān)鍵字被排序,并按排序順序檢索行。

5、Using index:從只使用索引樹(shù)中的信息而不需要進(jìn)一步搜索讀取實(shí)際的行來(lái)檢索表中的列信息。當(dāng)查詢只使用作為單一索引一部分的列時(shí),可以使用該策略。

6、Using temporary:為了解決查詢,MySQL需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表來(lái)容納結(jié)果。典型情況如查詢包含可以按不同情況列出列的GROUP BY和ORDER BY子句時(shí)。

7、Using where:WHERE子句用于限制哪一個(gè)行匹配下一個(gè)表或發(fā)送到客戶。除非你專門(mén)從表中索取或檢查所有行,如果Extra值不為Using where并且表聯(lián)接類型為ALL或index,查詢可能會(huì)有一些錯(cuò)誤。

8、Using sort_union(...), Using union(...), Using intersect(...):這些函數(shù)說(shuō)明如何為index_merge聯(lián)接類型合并索引掃描。

9、Using index for group-by:類似于訪問(wèn)表的Using index方式,Using index for group-by表示MySQL發(fā)現(xiàn)了一個(gè)索引,可以用來(lái)查詢GROUP BY或DISTINCT查詢的所有列,而不要額外搜索硬盤(pán)訪問(wèn)實(shí)際的表。并且,按最有效的方式使用索引,以便對(duì)于每個(gè)組,只讀取少量索引條目。

通過(guò)相乘EXPLAIN輸出的rows列的所有值,你能得到一個(gè)關(guān)于一個(gè)聯(lián)接如何的提示。這應(yīng)該粗略地告訴你MySQL必須檢查多少行以執(zhí)行查詢。當(dāng)你使用max_join_size變量限制查詢時(shí),也用這個(gè)乘積來(lái)確定執(zhí)行哪個(gè)多表SELECT語(yǔ)句。

關(guān)于MySQL數(shù)據(jù)庫(kù)中EXPLAIN的使用方法及其注意事項(xiàng)的相關(guān)知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. SQL Server 2008 MDX學(xué)習(xí)筆記之理解元數(shù)組
  2. SQL Server數(shù)據(jù)庫(kù)DataRelation的應(yīng)用示例詳解
  3. SQL Server 2005/2008中的CTE應(yīng)用之遞歸查詢
  4. SQL Server 2008數(shù)據(jù)庫(kù)學(xué)習(xí)筆記之MDX查詢示例
  5. SQL Server 2008原生的分層數(shù)據(jù)類型hierarchyid簡(jiǎn)介
責(zé)任編輯:趙鵬 來(lái)源: CSDN博客
相關(guān)推薦

2010-06-02 10:02:38

Linux mysql

2011-03-04 16:09:48

數(shù)據(jù)庫(kù)優(yōu)化設(shè)計(jì)注意事項(xiàng)

2011-04-19 09:28:26

數(shù)據(jù)庫(kù)產(chǎn)品

2010-08-04 09:19:43

2011-04-20 14:52:02

數(shù)據(jù)庫(kù)優(yōu)化

2010-11-26 16:27:01

MySQL使用變量

2011-08-25 15:54:30

SQL Serverbit字段類型

2019-11-27 10:46:06

sqlserver數(shù)據(jù)庫(kù)sql

2010-07-15 13:38:35

2011-08-02 17:26:38

Oracle數(shù)據(jù)庫(kù)遠(yuǎn)程連接

2011-03-14 17:51:04

IBMDB2數(shù)據(jù)庫(kù)

2010-07-16 14:01:22

安裝SQL Serve

2022-03-01 13:35:01

數(shù)據(jù)庫(kù)備份技術(shù)

2010-04-22 13:44:38

負(fù)載均衡功能

2012-03-02 10:51:06

JavaJDBC

2010-08-31 10:53:18

DB2導(dǎo)入數(shù)據(jù)庫(kù)

2011-07-27 15:01:48

MySQL數(shù)據(jù)庫(kù)內(nèi)存表

2010-08-17 16:29:03

UPS旁路

2009-10-22 14:07:15

布線施工注意事項(xiàng)

2011-08-09 14:23:05

網(wǎng)站設(shè)計(jì)數(shù)據(jù)庫(kù)集群庫(kù)表散列
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)