中文字幕欧美日韩一区二区三区_高清久久一区_阳光姐妹淘韩国版_日韩精品免费视频一区二区三区_91在线成人_一级黄色免费_精品欧美黑人一区二区三区

MySQL查詢優化程序

在發布一個選擇行的查詢時, MySQL進行分析,看是否能夠對它進行優化,使它執行更快。本文我們將研究查詢優化程序怎樣工作。更詳細的信息,可參閱MySQL參考指南中的“Getting Maximum Performance from MySQL”,本文描述了MySQL采用的各種優化措施。(http://www.mysql.com/ 處的MySQL聯機參考指南在不斷地更新。)

MySQL查詢優化程序利用了索引。當然,它也利用了其他信息。例如,如果發布下列查詢,MySQL將非常快地執行它,不管相應的表有多大:

  SELECT * FROM tb1_name WHERE 1= 0

在此情形中,MySQL考察WHERE 子句,如果認識到不可能有滿足該查詢的行,就不會對該表進行搜索。可利用EXPLAIN 語句知道這一點,EXPLAIN 語句要求MySQL顯示某些有關它應該執行一條SELECT 查詢,而實際沒有執行的信息。為了使用E X P L A I N,只需要SELECT 語句前放置EXPLAIN 即可,如下所示:

EXPLAIN SELECT * FROM tb1_name WHERE 1= 0

點擊看大圖

通常,EXPLAIN 返回的信息比這個多,包括將用來掃描表的索引、將要使用的連接類型以及需要在每個表中掃描的行數估計等等。

1 優化程序怎樣工作

MySQL查詢優化程序有幾個目標,但其主要目標是盡量利用索引,而且盡量使用最具有限制性的索引以排除盡可能多的行。這樣做可能會適得其反,因為發布一條SELECT 語句的目的是尋找行,而不是拒絕它們。優化程序這樣工作的原因是從要考慮的行中排除行越快,那么找到確實符合給出標準的行就越快。如果能夠首先進行最具限制性的測試,則查詢可以進行得更快。假如有一個測試兩列的查詢,每列上都有一個索引:

  WHERE coll = "some value" AND col2 = "some other value"

還假定,與col1上的測試相符的有900 行,與col2 上的測試相符的有300 行,而兩個測試都通過的有30 行。如果首先測試c o l 1,必須檢查900 行以找到也與col2 值相符的30 行。那么測試中有870 將失敗。如果首先測試c o l 2,要找到也與col1值相符的30 行,只需檢查300 行。測試中有失敗270 次,這樣所涉及的計算較少,磁盤I/O 也較少。遵循下列準則,有助于優化程序利用索引:

1 比較具有相同類型的列。在比較中利用索引列時,應該使用那些類型相同的列。例如,CHAR(10) 被視為與CHAR(10) 或VARCHAR(10) 相同,但不同于CHAR(12) 和VARCHAR( 12 )。INT 與BIGINT 不同。在MySQL3.23 版以前,要求使用相同類型的列,否則列上的索引將不起作用。自3.23 版后,不嚴格要求這樣做,但相同的列類型比不同類型提供更好的性能。如果所比較的兩列類型不同,可使用ALTER TABLE語句修改其中之一使它們的類型相配。

2  比較中應盡量使索引列獨立。如果在函數調用或算術表達式中使用一個列,則MySQL不能使用這樣的索引,因為它必須對每行計算表達式的值。有時,這是不可避免的,但很多時候,可以重新編寫只取索引列本身的查詢。下面的WHERE 子句說明了怎樣進行這項工作。第一行中,優化程序將簡化表達式4/2 為值2,然后使用my_col 上的索引快速地找到小于2 的值。而在第二個表達式中,MySQL必須檢索出每行的my_col 值,乘以2,然后將結果與4 比較。沒索引可用,因為列中的每個值都要檢索,以便能對左邊的表達式求值:

  WHERE my_col < 4/2

  WHERE my_col * 2 < 4

  讓我們考慮另一個例子。假如有一個索引列date _ c o l。如果發布如下的查詢,相應的索引未被使用:

  SELECT * FROM my_tb1WHERE YEAR(date_col) < 1990

其中表達式并不將索引列與1990 比較,而是將從列值計算出的值用于比較,而且必須計算每行的這個值。結果是, date_col 上的索引不可能得到使用。怎樣解決?使用一個文字日期即可,這時將會使用date_col 上的索引:

  WHERE date_col < "1990-01-01"

但是假如沒有特定的日期值,那么可能會對找到具有出現在距今一定天數內的日期的記錄感興趣。有幾種方法來編寫這樣的查詢,但并非所有方法都很好。三種可能的方法如下:

點擊看大圖

其中第一行不能利用索引, 因為必須為每行檢索列, 以便能夠計算TO _ DAYS(date_col) 的值。第二行要好一些。c ut o ff 和TO _ DAY S ( CURRENT _ DATE) 兩者都是常量,因此比較表達式的右邊可在查詢處理前由優化程序一次計算出來,而不是每行計算一次。但date_col 列仍然出現在一個函數調用中,因此,沒有使用索引。第三行是最好的方法。比較表達式的右邊可在執行查詢前作為常量一次計算出來,但現在其值是一個日期。這個值可直接與date_col 的值進行比較,不再需要轉換為天數,可以利用索引。

■ 在LIKE 模式的起始處不要使用通配符。有時,有的人會用下列形式的WHERE 子句來搜索串:

  WHERE col_name LIKE "%string%"

如果希望找到s t r i n g,不管它出現在列中任何位置,那么這樣做是對的。但不要出于習慣在串的兩邊加“ %”。如果實際要查找的只是出現在列的開始處的串,則不應該要第一個“%”號。例如,如果在一個包含姓的列中查找“ M a c”起始的姓,應該編寫如下的WHERE 子句:

  WHERE last_name LIKE "Mac%"

優化程序考慮模式中的開始的文字部分,然后利用索引找到相符合的行。不過寧可寫成如下的表達式,它允許使用last_name 上的索引:

  WHERE last_name >= "Mac" AND last_name < "Mad"

這種優化對使用REGEXP 操作符的模式匹配不起作用。

■ 幫助優化程序更好地評估索引的有效性。缺省時,如果將索引列中的值與常量進行比較,優化程序將假定鍵字是均勻地分布在索引中的。優化程序還將對索引進行一個快速的檢查,以估計在確定相應的索引是否應該用于常量的比較時要使用多少條目。可利用myisamchk 或isamchk 的--analyze 選項給優化程序提供更好的信息,以便分析鍵值的分布。myisamchk 用于MyISAM 表,isamchk 用于ISAM 表。為了完成鍵值分析,必須能夠登錄到MySQL服務器主機中,而且必須對表文件具有寫訪問權限。

■ 利用EXPLAIN 檢驗優化程序操作。檢查用于查詢中的索引是否能很快地排除行。如果不能,那么應該試一下利用STRAIGHT_JOIN 強制按特定次序使用表來完成一個連接。查詢的執行方式不那么顯然;MySQL可能會有很多理由不以您認為最好的次序使用索引。

■ 測試查詢的其他形式,而且不止一次地運行它們。在測試一個查詢的其他形式時,應該每種方法運行幾次。如果對兩個不同方法中的每種只運行查詢一次,通常會發現第二個查詢更快,因為來自第一個查詢的信息在磁盤高速緩存中,不需要實際從磁盤上讀出。還應該盡量在系統負載相對平穩的時候運行查詢,以避免受系統中其他活動的影響。

北大青鳥網上報名
北大青鳥招生簡章
中文字幕欧美日韩一区二区三区_高清久久一区_阳光姐妹淘韩国版_日韩精品免费视频一区二区三区_91在线成人_一级黄色免费_精品欧美黑人一区二区三区
久久精品夜色噜噜亚洲aⅴ| 欧洲视频一区二区| 亚洲国产另类av| 一区二区三区成人| 亚洲高清久久久| 日韩专区在线视频| 日本女人一区二区三区| 激情六月婷婷综合| 成人手机在线视频| 91高清视频在线| 欧美日韩高清一区二区三区| 日韩亚洲欧美在线| 欧美激情一区二区| 亚洲午夜久久久久久久久电影网| 五月天网站亚洲| 国产精品一线二线三线精华| 99re66热这里只有精品3直播| 欧洲一区在线电影| 久久青草欧美一区二区三区| 国产精品初高中害羞小美女文| 一区二区三区鲁丝不卡| 久久激情五月激情| 色综合视频在线观看| 欧美精品一二三| 中文字幕一区在线| 日本亚洲视频在线| 成人国产精品免费观看| 欧美精品1区2区3区| 国产三级久久久| 午夜精品成人在线视频| 国产aⅴ综合色| 欧美日韩高清一区二区三区| 欧美韩国日本综合| 免费成人在线观看视频| 91亚洲男人天堂| 久久综合成人精品亚洲另类欧美 | 一区二区三区不卡在线观看 | 99这里只有久久精品视频| 欧美一区二区三区视频免费| 亚洲同性gay激情无套| 久草中文综合在线| 欧美日韩国产影片| 亚洲精品你懂的| 国产xxx精品视频大全| 日韩免费一区二区| 天涯成人国产亚洲精品一区av| av中文字幕不卡| 久久久久综合网| 美腿丝袜在线亚洲一区| 欧美图片一区二区三区| 亚洲精品欧美激情| 色综合天天在线| 日韩码欧中文字| 99视频超级精品| 中文字幕不卡三区| 风间由美一区二区三区在线观看 | 久久精品视频在线看| 日本aⅴ亚洲精品中文乱码| 欧美亚洲综合网| 夜夜精品视频一区二区| 色综合天天综合在线视频| 中文字幕亚洲欧美在线不卡| 成人激情文学综合网| 国产精品久久久久久久久搜平片| 韩国午夜理伦三级不卡影院| 日韩美一区二区三区| 精品一区二区久久久| 91精品国产一区二区| 日本中文字幕一区二区视频| 欧美日韩国产影片| 日韩va亚洲va欧美va久久| 884aa四虎影成人精品一区| 婷婷亚洲久悠悠色悠在线播放| 91在线国内视频| 一区二区三区加勒比av| 欧美日韩国产一级| 美女精品一区二区| 欧美xxxxxxxx| 成人性生交大合| 亚洲人成人一区二区在线观看| 成人18精品视频| 亚洲影院久久精品| 欧美一区二区三区免费| 激情五月婷婷综合| 欧美激情在线免费观看| 91亚洲精品乱码久久久久久蜜桃 | 美女脱光内衣内裤视频久久网站| 日韩一级片网址| 国产成人在线色| 亚洲精品日韩综合观看成人91| 欧美日韩国产色站一区二区三区| 欧美96一区二区免费视频| 久久久精品综合| 色婷婷av一区二区三区gif| 午夜电影网一区| 国产亚洲一区字幕| 日本乱人伦aⅴ精品| 免费在线观看一区二区三区| 久久色在线视频| 在线观看视频一区二区| 韩国成人精品a∨在线观看| 国产精品美女一区二区三区 | 久久精品国产99国产精品| 久久九九久精品国产免费直播| av毛片久久久久**hd| 日本在线观看不卡视频| 国产精品国产自产拍高清av王其| 欧美色视频在线| 粉嫩13p一区二区三区| 婷婷久久综合九色综合绿巨人| 国产日韩欧美a| 91精品国产综合久久久久| av亚洲产国偷v产偷v自拍| 麻豆精品久久久| 一区二区在线看| 国产区在线观看成人精品| 91精品国产综合久久香蕉麻豆| 99国产精品久久久久| 精品午夜一区二区三区在线观看| 亚洲人成7777| 国产精品福利一区二区| 欧美mv日韩mv国产| 欧美精品久久天天躁| 色哟哟一区二区在线观看| 国产aⅴ精品一区二区三区色成熟| 日本不卡123| 午夜久久久影院| 一区二区三区四区在线| 中文av字幕一区| 久久香蕉国产线看观看99| 欧美精品日韩综合在线| 日本久久一区二区三区| av不卡一区二区三区| 国产伦精品一区二区三区免费迷 | 欧美色偷偷大香| 色综合 综合色| 国产·精品毛片| 国产麻豆成人传媒免费观看| 久久国产成人午夜av影院| 亚洲成人av免费| 伊人婷婷欧美激情| 亚洲欧洲日韩女同| 国产精品午夜免费| 国产欧美一区二区精品仙草咪| 欧美videofree性高清杂交| 337p亚洲精品色噜噜噜| 欧美日韩一级二级三级| 欧洲亚洲国产日韩| 欧美在线免费观看亚洲| 91激情五月电影| 91国产丝袜在线播放| 欧美亚洲动漫精品| 欧美日韩精品一区二区天天拍小说| 色屁屁一区二区| 91高清在线观看| 欧美福利电影网| 日韩精品一区二区三区蜜臀| 日韩欧美激情四射| 精品久久久久一区二区国产| 日韩亚洲欧美在线观看| 久久综合成人精品亚洲另类欧美| 久久亚洲捆绑美女| 亚洲国产激情av| 日韩一区日韩二区| 一区二区三区电影在线播| 午夜精品一区二区三区免费视频 | 国产一区欧美日韩| 国产成人综合自拍| caoporn国产一区二区| 91黄色免费版| 在线成人av网站| 久久久美女毛片| 亚洲精品日产精品乱码不卡| 亚洲成人av免费| 国模冰冰炮一区二区| av电影在线不卡| 精品视频1区2区3区| 欧美v国产在线一区二区三区| 国产精品素人一区二区| 一区二区三区四区激情| 三级在线观看一区二区| 国产美女精品一区二区三区| 97久久久精品综合88久久| 9191成人精品久久| 国产日韩精品视频一区| 亚洲网友自拍偷拍| 美脚の诱脚舐め脚责91| 不卡视频免费播放| 91精品麻豆日日躁夜夜躁| 国产精品色呦呦| 日本美女一区二区| 不卡在线观看av| 日韩欧美亚洲一区二区| 综合中文字幕亚洲| 美女脱光内衣内裤视频久久网站 | 欧美日韩免费视频| 国产日韩欧美不卡| 日韩和欧美一区二区三区| 成人性视频网站| 91精品国产色综合久久|