1. 程式人生 > >一定要收藏的 38 個 MySQL 資料庫小技巧!

一定要收藏的 38 個 MySQL 資料庫小技巧!

無論是運維、開發、測試,還是架構師,資料庫技術是一個必備加薪神器,那麼,一直說學習資料庫、學MySQL,到底是要學習它的哪些東西呢?

 

 

1、如何快速掌握MySQL?

 

  • 培養興趣

 

興趣是最好的老師,不論學習什麼知識,興趣都可以極大地提高學習效率。當然學習MySQL 5.6也不例外。

 

  • 夯實基礎

 

計算機領域的技術非常強調基礎,剛開始學習可能還認識不到這一點,隨著技術應用的深 入,只有有著紮實的基礎功底,才能在技術的道路上走得更快、更遠。對於MySQL的學習來說, SQL語句是其中最為基礎的部分,很多操作都是通過SQL語句來實現的。所以在學習的過程中, 讀者要多編寫SQL語句,對於同一個功能,使用不同的實現語句來完成,從而深刻理解其不同之處。

 

  • 及時學習新知識

 

正確、有效地利用搜索引擎,可以搜尋到很多關於MySQL 5.6的相關知識。同時,參考別 人解決問題的思路,也可以吸取別人的經驗,及時獲取最新的技術資料。

 

  • 多實踐操作

 

資料庫系統具有極強的操作性,需要多動手上機操作。在實際操作的過程中才能發現問題, 並思考解決問題的方法和思路,只有這樣才能提高實戰的操作能力。

 

 

2、如何選擇伺服器的型別?

 

MySQL伺服器配置視窗中各個引數的含義如下。

 

【Server Configuration Type】該選項用於設定伺服器的型別。單擊該選項右側的向下按鈕, 即可看到包括3個選項。

 

3個選項的具體含義如下:

  • Development Machine(開發機器):該選項代表典型個人用桌面工作站。假定機器上執行 著多個桌面應用程式。將MySQL伺服器配置成使用最少的系統資源。

  • Server Machine (伺服器):該選項代表伺服器,MySQL伺服器可以同其它應用程式一起 執行,例如FTP、email和web伺服器。MySQL伺服器配置成使用適當比例的系統資源。

  • DedicatedMySQL Server Machine (專用 MySQL 伺服器):該選項代表只執行MySQL服務的伺服器。假定執行沒有執行其它應用程式。

    MySQL伺服器配置成使用所有可用系統資源。作為初學者,建議選擇【DevelopmentMachine】(開發者機器)選項,這樣佔用系統的資源 比較少。

 

 

3、如何選擇儲存引擎

 

不同儲存引擎都有各自的特點,以適應不同的需求,如下表所示。為了做出選擇:

 

  • 首先需 要考慮每一個儲存引擎提供了哪些不同的功能。如果要提供提交,回滾和崩潰恢復能力的事務安全(ACID相容)能力,並要求實現併發控 制,InnoDB是個很好的選擇。如果資料表主要用來插入和查詢記錄,則MyISAM引擎能提供較 高的處理效率;如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體中的Memory引擎,MySQL中使用該引擎作為臨時表,存放查詢的中間結果。如果只有INSERT和SELECT操作,可以選擇Archive引擎,Archive儲存引擎支援高併發的插 入操作,但是本身並不是事務安全的。Archive儲存引擎非常適合儲存歸檔資料,如記錄日誌信 息可以使用Archive引擎。

  • 使用哪一種引擎要根據需要靈活選擇,一個數據庫中多個表可以使用不同引擎以滿足各種效能和實際需求。

  • 使用合適的儲存引擎,將會提高整個資料庫的效能。

 

 

4、如何檢視預設儲存引擎?

 

使用SHOW ENGINES語句檢視系統中所有的儲存引擎,其中包括預設的儲存引擎。可以看出來當前資料庫系統中有五種儲存引擎,預設是MyISAM。還可以使用一種直接的方法檢視預設儲存引擎。執行結果直接顯示了當前預設的儲存引擎為MyISAM。

 

 

5、表刪除操作須謹慎

 

表刪除操作將把表的定義和表中的資料一起刪除,並且MySQL在執行刪除操作時,不會有 任何的確認資訊提示,因此執行刪除操時,應當慎重。在刪除表前,最好對錶中的資料進行備份, 這樣當操作失誤時,可以對資料進行恢復,以免造成無法挽回的後果。

 

同樣的,在使用ALTER TABLE進行表的基本修改操作時,在執行操作過程之前,也應該 確保對資料進行完整的備份,因為資料庫的改變是無法撤銷的,如果添加了一個不需要的欄位, 可以將其刪除;相同的,如果刪除了一個需要的列,該列下面的所有資料都將會丟失。

 

 

6、每個表中都要有一個主鍵嗎?

 

並不是每一個表中都需要主鍵,一般的,如果多個表之間進行連線操作時,需要用到主鍵。 因此並不需要為每個表建立主鍵,而且有些情況最好不使用主鍵。

 

 

7、每個表都可以任意選擇儲存引擎嗎?

 

外來鍵約束(FOREIGN KEY)不能跨引擎使用。MySQL支援多種儲存引擎,每一個表都可 以指定一個不同的儲存引擎,但是要注意:外來鍵約束是用來保證資料的參照完整性,如果表之間 需要關聯外來鍵,卻指定了不同的儲存引擎,這些表之間是不能建立外來鍵約束的。所以說,儲存引 擎的選擇也不完全是隨意的。

 

 

8、帶AUTO_INCREMENT欄位值是從1開始嗎?

 

預設的,在MySQL中,AUTO_INCREMENT的初始值是1,每新增一條記錄,欄位值自動加1。設定自增屬性(AUTO_INCREMENT)的時候,還可以指定第一條插入記錄的自增欄位的 值,這樣新插入的記錄的自增欄位值從初始值開始遞增,如在tb_emp8中插入第一條記錄,同時 指定id值為5,則以後插入的記錄的id值就會從6開始往上增加。新增唯一性的主鍵約束時, 往往需要設定欄位自動增加屬性。

 

 

9、TIMESTAMP與DATATIME兩者的區別

 

TIMESTAMP與DATETIME除了儲存位元組和支援的範圍不同外,還有一個最大的區別就是: DATETIME在儲存日期資料時,按實際輸入的格式儲存,即輸入什麼就儲存什麼,與時區無關; 而TIMESTAMP值的儲存是以UTC(世界標準時間)格式儲存的,儲存時對當前時區進行轉換, 檢索時再轉換回當前時區。即查詢時,根據當前時區的不同,顯示的時間值是不同的。

 

 

10、選擇資料型別的方法和技巧是什麼?

 

MySQL提供了大量的資料型別,為了優化儲存,提高資料庫效能,在任何情況下均應使用 最精確的型別。即在所有可以表示該列值的型別中,該型別使用的儲存最少。

 

  • 整數和浮點數

 

如果不需要小數部分,則使用整數來儲存資料;如果需要表示小數部分,則使用浮點數類 型。對於浮點資料列,存入的數值會對該列定義的小數位進行四捨五入。例如如果列的值的範 圍為1〜99999,若使用整數,則MEDIUMINT UNSIGNED是最好的型別;若需要儲存小數,則 使用FLOAT型別。浮點型別包括FLOAT和DOUBLE型別。DOUBLE型別精度比FLOAT型別高,因此,如要求儲存精度較高時,應選擇DOUBLE型別。

 

  • 浮點數和定點數

 

浮點數FLOAT,DOUBLE相對於定點數DECIMAL的優勢是:在長度一定的情況下,浮點 數能表示更大的資料範圍。但是由於浮點數容易產生誤差,因此對精確度要求比較高時,建議使 用DECIMAL來儲存。DECIMAL在MySQL中是以字串儲存的,用於定義貨幣等對精確度要 求較高的資料。在資料遷移中,float(M,D)是非標準SQL定義,資料庫遷移可能會出現問題,最 好不要這樣使用。另外兩個浮點數進行減法和比較運算時也容易出問題,因此在進行計算的時候, 一定要小心。如果進行數值比較,最好使用DECIMAL型別。

 

  • 日期與時間型別

 

MySQL對於不同種類的日期和時間有很多的資料型別,比如YEAR和TIME。如果只需要 記錄年份,則使用YEAR型別即可;如果只記錄時間,只須使用TIME型別。如果同時需要記錄日期和時間,則可以使用TIMESTAMP或者DATETIME型別。由於 TIMESTAMP列的取值範圍小於DATETIME的取值範圍,因此儲存範圍較大的日期最好使用 DATETIME。TIMESTAMP也有一個DATETIME不具備的屬性。預設的情況下,當插入一條記錄但並沒 有指定TIMESTAMP這個列值時,MySQL會把TIMESTAMP列設為當前的時間。因此當需要 插入記錄同時插入當前時間時,使用TIMESTAMP是方便的,另外TIMESTAMP在空間上比 DATETIME更有效。

 

CHAR與VARCHAR之間的特點與選擇

 

CHAR和VARCHAR的區別:

 

  • CHAR是固定長度字元,VARCHAR是可變長度字元;CHAR會自動刪除插入資料的尾部 空格,VARCHAR不會刪除尾部空格。

  • CHAR是固定長度,所以它的處理速度比VARCHAR的速度要快,但是它的缺點就是浪費 儲存空間。所以對儲存不大,但在速度上有要求的可以使用CHAR型別,反之可以使用 VARCHAR型別來實現。

 

儲存引擎對於選擇CHAR和VARCHAR的影響:

 

  • 對於MyISAM儲存引擎:最好使用固定長度的資料列代替可變長度的資料列。這樣可以使 整個表靜態化,從而使資料檢索更快,用空間換時間。

  • 對於InnoDB儲存引擎:使用可變長度的資料列,因為InnoDB資料表的儲存格式不分固定 長度和可變長度,因此使用CHAR不一定比使用VARCHAR更好,但由於VARCHAR是按照 實際的長度儲存,比較節省空間,所以對磁碟I/O和資料儲存總量比較好。

 

ENUM 和 SET

 

ENUM只能取單值,它的資料列表是一個列舉集合。它的合法取值列表最多允許有65 535 個成員。因此,在需要從多個值中選取一個時,可以使用ENUM。比如:性別欄位適合定義為 ENUM型別,每次只能從’男’或’女’中取一個值。SET可取多值。它的合法取值列表最多允許有64個成員。

 

空字串也是一個合法的SET值。 在需要取多個值的時候,適合使用SET型別,比如:要儲存一個人興趣愛好,最好使用SET型別。ENUM和SET的值是以字串形式出現的,但在內部,MySQL以數值的形式儲存它們。

 

BLOB 和 TEXT

 

BLOB是二進位制字串,TEXT是非二進位制字串,兩者均可存放大容量的資訊。BLOB主 要儲存圖片、音訊資訊等,而TEXT只能儲存純文字檔案。應分清兩者的用途。點選這裡總結了55道去BAT面試的MYSQL面試題。

 

 

11、MySQL中如何使用特殊字元

 

諸如單引號(’),雙引號("),反斜線()等符號,這些符號在MySQL中不能直接輸入 使用,否則會產生意料之外的結果。在MySQL中,這些特殊字元稱為轉義字元,在輸入時需要 以反斜線符號(’’)開頭,所以在使用單引號和雙引號時應分別輸入(’)或者("),輸入反 斜線時應該輸入(),其他特殊字元還有回車符( ),換行符( ),製表符(ab),退格 符()等。在向資料庫中插入這些特殊字元時,一定要進行轉義處理。

 

 

12、MySQL中可以儲存檔案嗎?

 

MySQL中的BLOB和TEXT欄位型別可以儲存資料量較大的檔案,可以使用這些資料型別 儲存影象、聲音或者是大容量的文字內容,例如網頁或者文件。雖然使用BLOB或者TEXT可 以儲存大容量的資料,但是對這些欄位的處理會降低資料庫的效能。如果並非必要,可以選擇只 儲存檔案的路徑。

 

 

13、MySQL如何執行區分大小寫的字串比較?

 

在Windows平臺下,MySQL是不區分大小的,因此字串比較函式也不區分大小寫。如果 想執行區分大小寫的比較,可以在字串前面新增BINARY關鍵字。例如預設情況下,’a’=‘A’ 返回結果為1,如果使用BINARY關鍵字,BINARY’a’=‘A’結果為0,在區分大小寫的情況下,’a’ 與’A’並不相同。

 

 

14、如何從日期時間值中獲取部分日期或時間值?

 

MySQL中,日期時間值以字串形式儲存在資料表中,因此可以使用字串函式分別擷取日期時間值的不同部分,例如某個名稱為dt的欄位有值“2010-10-01 12:00:30”,如果只需要獲 得年值,可以輸入LEFT(dt, 4),這樣就獲得了字串左邊開始長度為4的子字串,即YEAR 部分的值;如果要獲取月份值,可以輸入MID(dt,6,2),字串第6個字元開始,長度為2的子 字串正好為dt中的月份值。同理,讀者可以根據其他日期和時間的位置,計算並獲取相應的值。

 

 

15、如何改變預設的字符集?

 

CONVERT()函式改變指定字串的預設字符集,在開始的章節中,向讀者介紹使用GUI圖形化安裝配置工具進行MySQL的安裝和配置,其中的一個步驟是可以選擇MySQL的預設字符集。但是,如果只改變字符集,沒有必要把配置過程重新執行一遍,在這裡,一個簡單的方式是 修改配置檔案。

 

在Windows中,MySQL配置檔名稱為my.ini,該檔案在MySQL的安裝目錄下面。修改配置檔案中的default-character-set和character-set-server引數值,將其改為想要的字 符集名稱,如gbk、gb2312、latinl等,修改完之後重新啟動MySQL服務,即可生效。讀者可以在修改字符集時使用SHOW VARIABLES LIKE ’character_set_°%’;命令檢視當前字符集,以進行對比。

 

 

16、DISTINCT可以應用於所有的列嗎?

 

查詢結果中,如果需要對列進行降序排序,可以使用DESC,這個關鍵字只能對其前面的列 進行降序排列。例如,要對多列都進行降序排序,必須要在每一列的列名後面加DESC關鍵字。

 

而DISTINCT不同,DISTINCT不能部分使用。換句話說,DISTINCT關鍵字應用於所有列而不 僅是它後面的第一個指定列。例如,查詢3個欄位s_id,f_name,f_price,如果不同記錄的這3個欄位的組合值都不同,則所有記錄都會被查詢出來。

 

 

17、ORDER BY可以和LIMIT混合使用嗎?

 

在使用ORDER BY子句時,應保證其位於FROM子句之後,如果使用LIMIT,則必須位 於ORDER BY之後,如果子句順序不正確,MySQL將產生錯誤訊息。

 

 

18、什麼時候使用引號?

 

在查詢的時候,會看到在WHERE子句中使用條件,有的值加上了單引號,而有的值未加。 單引號用來限定字串,如果將值與字串型別列進行比較,則需要限定引號;而用來與數值進 行比較則不需要用引號。

 

 

19、在WHERE子句中必須使用圓括號嗎?

 

任何時候使用具有AND和OR操作符的WHERE子句,都應該使用圓括號明確操作順序。 如果條件較多,即使能確定計算次序,預設的計算次序也可能會使SQL語句不易理解,因此使 用括號明確操作符的次序,是一個好的習慣。

 

 

20、更新或者刪除表必須指定WHERE子句嗎?

 

在前面章節中可以看到,所有的UPDATE和DELETE語句全都在WHERE子句中指定了條 件。如果省略WHERE子句,則UPDATE或DELETE將被應用到表中所有的行。

 

因此,除非 確實打算更新或者刪除所有記錄,否則要注意使用不帶WHERE子句的UPDATE或DELETE 語句。建議在對錶進行更新和刪除操作之前,使用SELECT語句確認需要刪除的記錄,以免造 成無法挽回的結果。

 

 

21、索引對資料庫效能如此重要,如何使用它?

 

為資料庫選擇正確的索引是一項複雜的任務。如果索引列較少,則需要的磁碟空間和維護開銷 都較少。如果在一個大表上建立了多種組合索引,索引檔案也會膨脹很快。

 

而另一方面,索引較多 可覆蓋更多的查詢。可能需要試驗若干不同的設計,才能找到最有效的索引。可以新增、修改和刪 除索引而不影響資料庫架構或應用程式設計。因此,應嘗試多個不同的索引從而建立最優的索引。

 

 

22、儘量使用短索引

 

對字串型別的欄位進行索引,如果可能應該指定一個字首長度。例如,如果有一個 CHAR(255)的列,如果在前10個或30個字元內,多數值是惟一的,則不需要對整個列進行索引。 短索引不僅可以提高查詢速度而且可以節省磁碟空間、減少I/O操作。

 

 

23、MySQL儲存過程和函式有什麼區別?

 

在本質上它們都是儲存程式。函式只能通過return語句返回單個值或者表物件;而儲存過程 不允許執行return,但是可以通過out引數返回多個值。函式限制比較多,不能用臨時表,只能用表變數,還有一些函式都不可用等等;而儲存過程的限制相對就比較少。函式可以嵌入在SQL 語句中使用,可以在SELECT語句中作為查詢語句的一個部分呼叫;而儲存過程一般是作為一個獨立的部分來執行。

 

 

24、儲存過程中的程式碼可以改變嗎?

 

目前,MySQL還不提供對已存在的儲存過程程式碼的修改,如果必須要修改儲存過程,必須使用DROP語句刪除之後,再重新編寫程式碼,或者建立一個新的儲存過程。

 

 

25、儲存過程中可以呼叫其他儲存過程嗎?

 

儲存過程包含使用者定義的SQL語句集合,可以使用CALL語句呼叫儲存過程,當然在儲存 過程中也可以使用CALL語句呼叫其他儲存過程,但是不能使用DROP語句刪除其他儲存過程。

 

 

26、儲存引數不要與資料表中的欄位名相同

 

在定義儲存過程引數列表時,應注意把引數名與資料庫表中的欄位名區別開來,否則將出 現無法預期的結果。

 

 

27、儲存過程的引數可以使用中文嗎?

 

一般情況下,可能會出現儲存過程中傳入中文引數的情況,例如某個儲存過程根據使用者的 名字查詢該使用者的資訊,傳入的引數值可能是中文。這時需要在定義儲存過程的時候,在後面加 上character set gbk,不然呼叫儲存過程使用中文引數會出錯,比如定義userInfo儲存過程,程式碼 如下:

CREATE PROCEDURE useInfo(IN u_name VARCHAR(50) character set gbk, OUT u_age INT)

 

 

28、MySQL中檢視和表的區別以及聯絡?

 

兩者的區別:

  • (1)檢視是已經編譯好的SQL語句,是基於SQL語句的結果集的視覺化的表,而表不是。

  • (2)檢視沒有實際的物理記錄,而基本表有。

  • (3)表是內容,檢視是視窗。

  • (4)表佔用物理空間而檢視不佔用物理空間,檢視只是邏輯概念的存在,表可以及時對它 進行修改,但檢視只能用建立的語句來修改。

  • (5)檢視是檢視資料表的一種方法,可以查詢資料表中某些欄位構成的資料,只是一些SQL 語句的集合。從安全的角度來說,檢視可以防止使用者接觸資料表,因而使用者不知道表結構。

  • (6)表屬於全域性模式中的表,是實表;檢視屬於區域性模式的表,是虛表。

  • (7)檢視的建立和刪除隻影響檢視本身,不影響對應的基本表。

     

兩者的聯絡:

  • 檢視(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有記錄) 都來自基本表,它依據基本表存在而存在。一個檢視可以對應一個基本表,也

  • 可以對應多個基本 表。檢視是基本表的抽象和在邏輯意義上建立的新關係。

 

 

29、使用觸發器時須特別注意

 

在使用觸發器的時候需要注意,對於相同的表,相同的事件只能建立一個觸發器,比如對 表account建立了一個BEFORE INSERT觸發器,那麼如果對錶account再次建立一個BEFORE INSERT觸發器,MySQL將會報錯,此時,只可以在表account上建立AFTER INSERT或者 BEFORE UPDATE型別的觸發器。靈活的運用觸發器將為操作省去很多麻煩。點選這裡總結了55道去BAT面試的MYSQL面試題。

 

 

30、及時刪除不再需要的觸發器

 

觸發器定義之後,每次執行觸發事件,都會啟用觸發器並執行觸發器中的語句。如果需求 發生變化,而觸發器沒有進行相應的改變或者刪除,則觸發器仍然會執行舊的語句,從而會影響 新的資料的完整性。因此,要將不再使用的觸發器及時刪除。

 

 

31、應該使用哪種方法建立使用者?

 

建立使用者有幾種方法:GRANT語句、CREATE USER語句和直接操作user表。一般情況, 最好使用GRANT或者CREATE USER語句,而不要直接將使用者資訊插入user表,因為user表中儲存了全域性級別的許可權以及其他的賬戶資訊,如果意外破壞了 user表中的記錄,則可能會對 MySQL伺服器造成很大影響。

 

 

32、mysqldump備份檔案只能在MySQL使用?

 

mysqldump備份的文字檔案實際是資料庫的一個副本,使用該檔案不僅可以在MySQL中恢 複數據庫,而且通過對該檔案的簡單修改,可以使用該檔案在SQL Server或者Sybase等其他數 據庫中恢復資料庫。這在某種程度上實現了資料庫之間的遷移。

 

 

33、如何選擇備份工具?

 

直接複製資料檔案是最為直接、快速的備份方法,但缺點是基本上不能實現增量備份。備 份時必須確保沒有使用這些表。如果在複製一個表的同時伺服器正在修改它,則複製無效。備份 檔案時,最好關閉伺服器,然後重新啟動伺服器。為了保證資料的一致性,需要在備份檔案前, 執行以下SQL語句:

 

CREATE PROCEDURE useInfo(IN u_name VARCHAR(50) character set gbk, OUT u_age INT)

 

目錄下即可。mysqlhotcopy 是一個 PERL 程式,它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp來快速備份資料庫。它是備份資料庫或單個表的最快的途徑,但它只能執行在資料庫檔案所在的 機器上,並且mysqlhotcopy只能用於備份MyISAM表。

 

mysqlhotcopy適合於小型資料庫的備份, 資料量不大,可以使用mysqlhotcopy程式每天進行一次完全備份。mysqldump將資料表導成SQL指令碼檔案,在不同的MySQL版本之間升級時相對比較合適, 這也是最常用的備份方法。mysqldump比直接複製要慢些。也就是把記憶體中的資料都重新整理到磁碟中,同時鎖定資料表,以保證複製過程中不會有新的 資料寫入。這種方法備份出來的資料恢復也很簡單,直接複製回原來的資料庫。

 

 

34、平時應該開啟哪些日誌?

 

日誌既會影響MySQL的效能,又會佔用大量磁碟空間。因此,如果不必要,應儘可能少地 開啟日誌。根據不同的使用環境,可以考慮開啟不同的日誌。例如,在開發環境中優化查詢效率 低的語句,可以開啟慢查詢日誌;如果需要記錄使用者的所有查詢操作,可以開啟通用查詢日誌; 如果需要記錄資料的變更,可以開啟二進位制日誌;錯誤日誌是預設開啟的。

 

 

35、如何使用二進位制日誌?

 

二進位制日誌主要用來記錄資料變更。如果需要記錄資料庫的變化,可以開啟二進位制日誌。 基於二進位制日誌的特性,不僅可以用來進行資料恢復,還可用於資料複製。

 

在資料庫定期備份的情況下,如果出現數據丟失,可以先用備份恢復大部分資料,然後使用二進位制日誌恢復最近備份 後變更的資料。在雙機熱備情況下,可以使用MySQL的二進位制日誌記錄資料的變更,然後將變 更部分複製到備份伺服器上。

 

 

36、如何使用慢查詢日誌?

 

慢查詢日誌主要用來記錄查詢時間較長的日誌。在開發環境下,可以開啟慢查詢日誌來記 錄查詢時間較長的查詢語句,然後對這些語句進行優化。通過配long_query_time的值,可以靈活地掌握不同程度的慢查詢語句。

 

 

37、是不是索引建立得越多越好?

 

合理的索引可以提高查詢的速度,但不是索引越多越好。在執行插入語句的時候,MySQL 要為新插入的記錄建立索引。所以過多的索引會導致插入操作變慢。原則上是隻有查詢用的欄位 才建立索引。

 

 

38、如何使用查詢緩衝區?

 

查詢緩衝區可以提高查詢的速度,但是這種方式只適合查詢語句比較多、更新語句比較少 的情況。預設情況下查詢緩衝區的大小為〇,也就是不可用。可以修改queiy_cache_size以調整 查詢緩衝區大小;修改query_cache_type以調整查詢緩衝區的型別。在my.ini中修改 query_cache_size 和 query_cache_type 的值如下所示:

 

表示開啟查詢緩衝區。只有在查詢語句中包含SQL_NO_CACHE關鍵字 時,才不會使用查詢緩衝區。可以使用FLUSH QUERY CACHE語句來重新整理緩衝區,清理查詢緩衝區中的碎片。