• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • MySQL 5.0 數據庫新特性的存儲過程

    發表于:2008-02-21來源:作者:點擊數: 標簽:MySQL
    當你提交一個查詢的時候,My SQL 會分析它,看是否可以做一些優化使處理該查詢的速度更快。這一部分將介紹查詢優化器是如何工作的。如果你想知道MySQL采用的優化手段,可以查看MySQL參考手冊。 當然,MySQL查詢優化器也利用了索引,但是它也使用了其它一些信
    當你提交一個查詢的時候,MySQL會分析它,看是否可以做一些優化使處理該查詢的速度更快。這一部分將介紹查詢優化器是如何工作的。如果你想知道MySQL采用的優化手段,可以查看MySQL參考手冊。

      當然,MySQL查詢優化器也利用了索引,但是它也使用了其它一些信息。例如,如果你提交如下所示的查詢,那么無論數據表有多大,MySQL執行它的速度都會非??欤?/P>

      SELECT * FROM tbl_name WHERE 0;

      在這個例子中,MySQL查看WHERE子句,認識到沒有符合查詢條件的數據行,因此根本就不考慮搜索數據表。你可以通過提供一個EXPLAIN語句看到這種情況,這個語句讓MySQL顯示自己執行的但實際上沒有真正地執行的SELECT查詢的一些信息。如果要使用EXPLAIN,只需要在EXPLAIN單詞放在SELECT語句的前面:

      mysql> EXPLAIN SELECT * FROM tbl_name WHERE 0\G
      ***************************
      1. row ***************************
      id: 1
      select_type: SIMPLE
      table: NULL
      type: NULL
      possible_keys: NULL
      key: NULL
      key_len: NULL
      ref: NULL
      rows: NULL
      Extra: Impossible WHERE

      通常情況下,EXPLAIN返回的信息比上面的信息要多一些,還包括用于掃描數據表的索引、使用的聯結類型、每張數據表中估計需要檢查的數據行數量等非空(NULL)信息。

      優化器是如何工作的

      MySQL查詢優化器有幾個目標,但是其中最主要的目標是盡可能地使用索引,并且使用最嚴格的索引來消除盡可能多的數據行。你的最終目標是提交SELECT語句查找數據行,而不是排除數據行。優化器試圖排除數據行的原因在于它排除數據行的速度越快,那么找到與條件匹配的數據行也就越快。如果能夠首先進行最嚴格的測試,查詢就可以執行地更快。假設你的查詢檢驗了兩個數據列,每個列上都有索引:

      SELECT col3 FROM mytable
      WHERE col1 = ’some value’ AND col2 = ’some other value’;

      假設col1上的測試匹配了900個數據行,col2上的測試匹配了300個數據行,而同時進行的測試只得到了30個數據行。先測試Col1會有900個數據行,需要檢查它們找到其中的30個與col2中的值匹配記錄,其中就有870次是失敗了。先測試col2會有300個數據行,需要檢查它們找到其中的30個與col1中的值匹配的記錄,只有270次是失敗的,因此需要的計算和磁盤I/O更少。其結果是,優化器會先測試col2,因為這樣做開銷更小。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>