青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 224  文章 - 41  trackbacks - 0
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

享受編程

常用鏈接

留言簿(11)

隨筆分類(159)

隨筆檔案(224)

文章分類(2)

文章檔案(4)

經典c++博客

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

    原文地址:

explain顯示了mysql如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。

     使用方法,在select語句前加上explain就可以了:
如:explain select surname,first_name form a,b where a.id=b.id

分析結果形式如下:


EXPLAIN列的解釋:
table
顯示這一行的數據是關于哪張表的

type
這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、indexhe和ALL

possible_keys
顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從WHERE語句中選擇一個合適的語句

key
實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會選擇優化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX(indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引

key_len
使用的索引的長度。在不損失精確性的情況下,長度越短越好

ref
顯示索引的哪一列被使用了,如果可能的話,是一個常數

rows
MYSQL認為必須檢查的用來返回請求數據的行數

Extra
關于MYSQL如何解析查詢的額外信息。將在表4.3中討論,但這里可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結果是檢索會很慢
extra列返回的描述的意義

Distinct
一旦MYSQL找到了與行相聯合匹配的行,就不再搜索了

Not exists
 
MYSQL優化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標準的行,
就不再搜索了

Range checked for each
Record(index map:#)
 
沒有找到理想的索引,因此對于從前面表中來的每一個
行組合,MYSQL檢查使用哪個索引,并用它來從表中返回行。
這是使用索引的最慢的連接之一
Using filesort
 
看到這個的時候,查詢就需要優化了。MYSQL需要進行額外的步驟
來發現如何對返回的行排序。它根據連接類型以及存儲排序鍵值和
匹配條件的全部行的行指針來排序全部行

Using index
 
列數據是從僅僅使用了索引中的信息而沒有讀取實際的行動的表返回的,
這發生在對表的全部的請求列都是同一個索引的部分的時候

Using temporary
 
看到這個的時候,查詢需要優化了。
這里,MYSQL需要創建一個臨時表來存儲結果,
這通常發生在對不同的列集進行ORDER BY上,而不是GROUP BY上

Where used
 
使用了WHERE從句來限制哪些行將與下一張表匹配或者是返回給用戶。
如果不想返回表中的全部行,并且連接類型ALL或index,這就會發生,
或者是查詢有問題
 
不同連接類型的解釋(按照效率高低的順序排序)
system
表只有一行:system表。這是const連接類型的特殊情況

const
 
表中的一個記錄的最大值能夠匹配這個查詢(索引可以是主鍵或惟一索引)。因為只有一行,這個值實際就是常數,因為MYSQL先讀這個值然后把它當做常數來對待

eq_ref
 
在連接中,MYSQL在查詢時,從前面的表中,對每一個記錄的聯合都從表中讀取一個記錄,它在查詢使用了索引為主鍵或惟一鍵的全部時使用

ref
 
這個連接類型只有在查詢使用了不是惟一或主鍵的鍵或者是這些類型的部分(比如,利用最左邊前綴)時發生。對于之前的表的每一個行聯合,全部記錄都將從表中讀出。這個類型嚴重依賴于根據索引匹配的記錄多少—越少越好

range
 
這個連接類型使用索引返回一個范圍中的行,比如使用>或<查找東西時發生的情況

index
 
這個連接類型對前面的表中的每一個記錄聯合進行完全掃描(比ALL更好,因為索引一般小于表數據)

ALL

這個連接類型對于前面的每一個記錄聯合進行完全掃描,這一般比較糟糕,應該盡量避免

ppt地址:
http://www.slideshare.net/sky000/mysql-explain

MySQL之Explain
原文地址:http://hi.baidu.com/thinkinginlamp/blog/item/eef0cd119239db17b8127b6f.html

前記:很多東西看似簡單,那是因為你并未真正了解它。

Explain命令用于查看執行效果。雖然這個命令只能搭配select類型語句使用,如果你想查看update,delete類型語句中的索引效果,也不是太難的事情,只要保持條件不變,把類型轉換成select就行了。

explain的語法如下:

explain [extended] select ... from ... where ...

如果使用了extended,那么在執行完explain語句后,可以使用show warnings語句查詢相應的優化信息。

==============================================================

mk-visual-explain工具擴展了explain,它提供了一種更直觀的樹形表現形式,使用方法很簡單:

mk-visual-explain <file_containing_explain_output>
mk-visual-explain -c <file_containing_query>
mysql -e "explain select * from mysql.user" | mk-visual-explain


也可以在MySQL命令行里通過設置pager的方式來執行:

mysql> pager mk-visual-explain
mysql> explain [extended] select ... from ... where ...


==============================================================

進入正題,為了讓例子更具體化,我們先來建一個表,插入一點測試數據:

CREATE TABLE IF NOT EXISTS `article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author_id` int(10) unsigned NOT NULL,
`category_id` int(10) unsigned NOT NULL,
`views` int(10) unsigned NOT NULL,
`comments` int(10) unsigned NOT NULL,
`title` varbinary(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
);

INSERT INTO `article`
(`author_id`, `category_id`
, `views`, `comments`, `title`, `content`) VALUES
(1, 1, 
1, 1, '1', '1'),
(2, 2, 2, 
2, '2', '2');

缺省只建了一個主鍵,沒有建其他的索引。測試時,如果你時間充裕,應該盡可能插入多一點的測試數據,怎么說也應該保證幾千條。如果數據量過少,可能會影響MySQL在索引選擇上的判斷。如此一來,一旦產品上線,數據量增加。索引往往不會按照你的預想工作。

下面讓我們設置一個任務:查詢category_id為1且comments大于1的情況下,views最多的article_id。

問題很簡單,SQL也很簡單:

SELECT author_id
FROM `article`
WHERE category_id = 1 AND comments > 1
ORDER BY views DESC
LIMIT 1


下面讓我們用explain命令查看索引效果:

EXPLAIN SELECT author_id
FROM `article`
WHERE category_id = 1
AND comments > 1
ORDER BY views DESC
LIMIT 1


這時explain部分結果如下:

type: ALL
key: NULL
Extra: Using where; Using filesort


顯示數據庫進行了全表掃描,沒有用到索引,并且在過程中文件排序。這樣的結果肯定是糟糕的,下面讓我們通過建立索引優化一下它:

ALTER TABLE `article` ADD INDEX x ( `category_id` , `comments`, `views` ) ;


這時explain部分結果如下:

type: range
key: x
Extra: Using where; Using filesort


雖然不再是全表掃描了,但是仍然存在文件排序。一般來說,文件排序都是由于ORDER BY語句一起的,而我們已經把views字段放到了聯合索引里面,為什么沒有效果呢?這是因為按照BTree的工作原理,先排序category_id,如果遇到相同的category_id則再排序comments,如果遇到相同的comments則再排序views。當comments字段在聯合索引里處于中間位置時,因為comments > 1條件是一個范圍值(所謂range),MySQL目前無法利用索引再對后面的views部分進行檢索,如果換成是是comments in ('a', 'b', 'c')這樣的多等情況則可以,關于這一點,在High Performance MySQL一書中專門有過敘述,名為Avoiding Multiple Range Conditions,在復合索引里,僅僅只能保存一個range類型的查詢字段,并且要放到復合索引的末尾,否則,range類型查詢字段后面的索引無效。詳細的介紹大家可以自己查閱。從這個意義上來說,此時的category_id, comments, views復合索引的效果不會比category_id, comments復合索引的效果好。

文件排序是否會引起性能問題要視數據分布情況而定。這里有一個案例可供參考:Using index for ORDER BY vs restricting number of rows.

多數情況下應該避免出現它。此時可以這樣設置索引:

ALTER TABLE `article` ADD INDEX y ( `category_id` , `views` ) ;

這時explain部分結果如下:

type: range
key: x
Extra: Using where; Using filesort


很奇怪,系統無視我們剛建立的y索引,還使用x索引。導致仍然存在文件排序。

如果你也出現了類似的情況,可以使用強制索引:

EXPLAIN SELECT author_id
FROM `article`
FORCE INDEX ( y )
WHERE category_id = 1
AND comments > 1
ORDER BY views DESC
LIMIT 1


這時explain部分結果如下:

type: ref
key: y
Extra: Using where

也可以刪除x索引,那樣系統會自動使用y索引(有時候MySQL比較傻,所以你得會使用FORCE INDEX)。

后記:Explain的type顯示的是訪問類型,是較為重要的一個指標,結果值從好到壞依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般來說,得保證查詢至少達到range級別,最好能達到ref,否則就可能會出現性能問題。

Explain的Extra信息也相當重要,如果此信息顯示Using filesort或者Using temporary的話,噩夢即將開始,不過也不盡然,比如說在一個WHERE ... ORDER BY ... 類型的查詢里,很多時候我們無法創建一個兼顧WHERE和ORDER BY的索引,此時如果按照WHERE來確定索引,那么在ORDER BY時,就必然會引起Using filesort,文件排序是好是壞需要仔細判斷,說白了就是看是先過濾再排序劃算,還是先排序再過濾劃算,正確答案取決與數據分布的情況,具體的情況可以參考Using index for ORDER BY vs restricting number of rows

Explain具體含義參見此鏈接:http://dev.mysql.com/doc/refman/5.1/en/using-explain.html


posted on 2011-09-19 14:10 漂漂 閱讀(815) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲先锋成人| 久久九九热re6这里有精品| 欧美成人在线网站| 久久久久久91香蕉国产| 激情文学综合丁香| 欧美激情女人20p| 欧美精品在线免费| 亚洲一二三区在线| 亚洲欧美日本另类| 一区二区三区在线高清| 亚洲国产女人aaa毛片在线| 欧美岛国在线观看| 亚洲自拍偷拍福利| 久久精品道一区二区三区| 亚洲观看高清完整版在线观看| 欧美成人福利视频| 欧美日韩中文在线观看| 久久av老司机精品网站导航| 久久久精品网| 一本久久青青| 久久成人精品无人区| 亚洲日韩视频| 亚洲男人第一av网站| 亚洲高清一区二区三区| 亚洲精品资源美女情侣酒店| 国产欧美一区二区三区视频| 欧美成人精品在线观看| 欧美日一区二区三区在线观看国产免| 午夜精品视频在线观看一区二区 | 99re8这里有精品热视频免费 | 亚洲最新色图| 国内综合精品午夜久久资源| 亚洲人永久免费| 国产欧美日韩另类视频免费观看| 欧美1区视频| 国产精品美女久久| 亚洲激情六月丁香| 国外成人在线视频| 夜久久久久久| 亚洲巨乳在线| 久久精品一区二区三区不卡牛牛| 亚洲天堂男人| 欧美大胆人体视频| 久久亚洲影音av资源网| 欧美色图天堂网| 亚洲国产另类久久精品| 国产午夜精品久久久久久免费视| 亚洲另类自拍| 亚洲人成77777在线观看网| 欧美专区日韩视频| 欧美在线观看视频一区二区三区 | 欧美中文字幕久久| 亚洲欧美日韩一区在线观看| 欧美精品久久久久久久久久| 欧美h视频在线| 狠狠干综合网| 午夜精品一区二区三区在线| 亚洲免费一在线| 欧美午夜免费| 一区二区欧美日韩| 国产精品99久久久久久www| 欧美精品国产精品| 亚洲国产精品黑人久久久| 在线观看日韩www视频免费 | 亚洲激情第一页| 亚洲黄色三级| 欧美高清视频一区二区| 亚洲国产精品成人va在线观看| 在线日本成人| 免费视频一区| 亚洲精品一区二区三区不| 99精品国产一区二区青青牛奶| 牛夜精品久久久久久久99黑人 | 久久www免费人成看片高清| 国产精品免费小视频| 午夜电影亚洲| 久久精品国亚洲| 激情综合久久| 免费日韩成人| 日韩午夜在线电影| 午夜精品一区二区三区电影天堂 | 国产精品区一区二区三区| 中文一区二区| 亚洲欧美视频一区二区三区| 国产日韩欧美夫妻视频在线观看| 亚洲欧美日韩专区| 久久久999精品免费| 亚洲国产成人久久| 欧美高清日韩| 亚洲欧美视频一区| 女人天堂亚洲aⅴ在线观看| 亚洲免费高清| 国产精品任我爽爆在线播放 | 99精品国产福利在线观看免费| 亚洲一区二区3| 国产偷国产偷亚洲高清97cao| 久久国内精品自在自线400部| 老巨人导航500精品| 亚洲日本va午夜在线电影| 欧美日韩一区二区视频在线观看| 亚洲手机成人高清视频| 久久裸体艺术| 一本久道久久综合狠狠爱| 国产日韩欧美综合一区| 老司机凹凸av亚洲导航| 这里只有精品丝袜| 欧美风情在线| 欧美亚洲综合久久| 亚洲精品久久7777| 国产日韩高清一区二区三区在线| 欧美不卡在线视频| 午夜久久电影网| 亚洲精品偷拍| 久热国产精品视频| 亚洲欧美国产高清va在线播| 在线观看欧美日韩| 国产区精品视频| 欧美日韩你懂的| 免费在线看成人av| 欧美一级二级三级蜜桃| 一本色道久久综合狠狠躁的推荐| 欧美mv日韩mv亚洲| 久久er精品视频| 亚洲一区二区av电影| 亚洲七七久久综合桃花剧情介绍| 国产伦精品免费视频| 欧美视频在线不卡| 男女视频一区二区| 久久人人97超碰精品888| 亚洲欧美日韩国产| 国产精品99久久久久久宅男| 最新日韩av| 欧美激情一区二区在线 | 午夜久久资源| 亚洲一区二区三区乱码aⅴ| 亚洲日本久久| 亚洲精品极品| 91久久精品国产91久久性色tv | 国产伦精品一区二区三区在线观看| 欧美日韩大片| 欧美激情在线免费观看| 欧美激情网站在线观看| 麻豆精品一区二区av白丝在线| 久久精品伊人| 久久久久国产精品人| 久久精品国产亚洲aⅴ| 欧美一级电影久久| 欧美诱惑福利视频| 久久久久国产精品人| 裸体丰满少妇做受久久99精品| 久久久久欧美| 免费在线看一区| 欧美激情第8页| 欧美视频三区在线播放| 欧美性做爰毛片| 国产伦精品一区二区三区免费| 国产酒店精品激情| 激情综合色综合久久综合| 亚洲第一级黄色片| 亚洲毛片在线观看.| 亚洲色图综合久久| 欧美一区视频在线| 久久综合久色欧美综合狠狠 | 欧美中文字幕精品| 久久久www成人免费无遮挡大片| 久久久久国产精品一区二区| 久久婷婷丁香| 亚洲三级毛片| 亚洲综合日韩| 老司机免费视频一区二区| 欧美精品一区二区三区在线看午夜 | 亚洲欧洲一区二区天堂久久| 一区二区高清在线| 久久精品成人一区二区三区| 女仆av观看一区| 国产精品免费aⅴ片在线观看| 国产亚洲观看| 99日韩精品| 久久国内精品自在自线400部| 欧美不卡高清| 亚洲网站在线播放| 久久在线免费观看| 国产精品黄页免费高清在线观看| 韩日在线一区| 亚洲一区免费视频| 久久亚洲精品欧美| 在线视频欧美日韩精品| 久久久久久伊人| 国产精品福利在线| 亚洲国产一区在线| 欧美一区二区视频在线观看| 亚洲福利国产精品| 欧美一区午夜精品| 欧美日韩在线影院| 亚洲国产天堂久久综合网| 性欧美8khd高清极品| 亚洲欧洲在线视频| 久久久天天操| 国产一区二区三区在线免费观看| 一区二区三区高清在线|