MySQL 5.0 數據庫新特性的存儲過程_MySQL教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:MySql管理的一點心得
      MySql數據庫是中小型網站后臺數據庫的首選,因為它對非商業應用是免費的.網站開發者可以搭建一個Linux+Apache+PHP+MySql 平臺,這是一個最省錢的高效平臺.在使用MySql進行開發時,MySql自帶的文檔對于新手來說是份很好的參考資料.本文是我在使用MySql中的小小心得。 當前

        當你提交一個查詢的時候,MySQL會分析它,看是否可以做一些優化使處理該查詢的速度更快。這一部分將介紹查詢優化器是如何工作的。如果你想知道MySQL采用的優化手段,可以查看MySQL參考手冊。

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

        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,因為這樣做開銷更小。

        你可以通過下面一個指導幫助優化器更好地利用索引:

        盡量比較數據類型相同的數據列。當你在比較操作中使用索引數據列的時候,請使用數據類型相同的列。相同的數據類型比不同類型的性能要高一些。例如,INT與BIGINT是不同的。CHAR(10)被認為是CHAR(10)或VARCHAR(10),但是與CHAR(12)或VARCHAR(12)不同。如果你所比較的數據列的類型不同,那么可以使用ALTER TABLE來修改其中一個,使它們的類型相匹配。

        盡可能地讓索引列在比較表達式中獨立。如果你在函數調用或者更復雜的算術表達式條件中使用了某個數據列,MySQL就不會使用索引,因為它必須計算出每個數據行的表達式值。有時候這種情況無法避免,但是很多情況下你可以重新編寫一個查詢讓索引列獨立地出現。

        下面的WHERE子句顯示了這種情況。它們的功能相同,但是對于優化目標來說就有很大差異了:

        WHERE mycol < 4 / 2

        WHERE mycol * 2 < 4

       

        對于第一行,優化器把表達式4/2簡化為2,接著使用mycol上的索引來快速地查找小于2的值。對于第二個表達式,MySQL必須檢索出每個數據行的mycol值,乘以2,接著把結果與4進行比較。在這種情況下,不會使用索引。數據列中的每個值都必須被檢索到,這樣才能計算出比較表達式左邊的值。

      分享:mysql導入數據庫文件最大限制的修改方法
      自己電腦上裝的WAMP,在導入數據庫比較大(大于2M)時遇到錯誤,不能導入。 找到解決方法: php.ini配置文件中有三處地方需要改動: upload_max_filesize memory_limit post_max_size 這三個值都工具實際情況改下,重啟服務器以后,雖然導入時仍然顯示是 最大限制:2,048

      來源:模板無憂//所屬分類:MySQL教程/更新時間:2015-02-06
      相關MySQL教程