程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL 數據庫優化的詳細辦法解釋

MySQL 數據庫優化的詳細辦法解釋

編輯:MySQL綜合教程

MySQL 數據庫優化的詳細辦法解釋。本站提示廣大學習愛好者:(MySQL 數據庫優化的詳細辦法解釋)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL 數據庫優化的詳細辦法解釋正文


以下的文章重要描寫的是MySQL數據庫簡略適用優化的詳細辦法的完成,中包含若何按期的表停止剖析與檢討, 和若何准確對表停止按期的優化,以下就是詳細計劃的描寫,願望在你往後的進修中會有所贊助。

1、按期剖析表和檢討表

剖析表的語法以下:

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name[, tbl_name]...

以上語句用於剖析和存儲表的症結字散布,剖析的成果將可使得體系獲得精確的統計信息,使得SQL可以或許生成准確的履行籌劃。假如用戶感到現實履行籌劃其實不是預期的履行籌劃,履行一次剖析表能夠會處理成績。在剖析時代,應用一個讀取鎖定對表停止鎖定。這關於MyISAM,DBD和InnoDB表有感化。

例如剖析一個數據表

analyze table table_name

檢討表的語法以下:


CHECK TABLE tb1_name[,tbl_name]...[option]...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

檢討表的感化是檢討一個或多個表能否有毛病,CHECK TABLE 對MyISAM 和 InnoDB表有感化,關於MyISAM表,症結字統計數據被更新

CHECK TABLE 也能夠檢討視圖能否有毛病,好比在視圖界說中被援用的表不存在。


2. 按期優化表

優化表的語法以下:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name [,tbl_name]...

假如刪除表的一年夜部門,或許假如曾經對含有可變長度行的表(含有 VARCHAR、BLOB或TEXT列的表)停止更多更改,則應應用OPTIMIZE TABLE敕令來停止表優化。這個敕令可以將表中的空間碎片停止歸並,而且可以清除因為刪除或許更新形成的空間糟蹋,但OPTIMIZE TABLE 敕令只對MyISAM、 BDB 和InnoDB表起感化。

例如: optimize table table_name


留意: analyze、check、optimize履行時代將對表停止鎖定,是以必定留意要在MySQL數據庫不忙碌的時刻履行相干的操作。

經常使用的SQL優化

我們在開辟的時刻經常用到的SQL語句,不過是INSERT、GROUPBY等等。關於這些SQL語句,我們怎樣停止優化?

1. 年夜批量拔出數據

當用load敕令導入數據的時刻,恰當的設置可以進步導入的速度。
關於MyISAM存儲引擎的表,可以經由過程以下方法疾速的導入年夜量的數據


ALTER TABLE tb1_name DISABLE KEYS;
loading the data
ALTER TABLE tb1_name ENABLE KEYS;

DISABLE KEYS 和 ENABLE KEYS 用來翻開或許封閉MyISAM表非獨一索引的更新。在導入年夜量的數據到一個非空的MyISAM表時,經由過程設置這兩個敕令,可以進步導入的效力。
關於導入年夜量的數據到一個空的MyISAM表時,默許就是先導入數據然後才創立索引的,索引不消停止設置。

load data infile '/home/mysql/text_txt' into table text

關於InnoDB類型的表,這類方法不克不及進步導入數據的效力,但也有幾種針對InnoDB類型的表停止優化的方法。

1. 由於InnoDB類型的表式依照主鍵的次序保留的,所以將導入的數據依照主鍵的次序排序,可以有用進步導入數據的效力。

2. 在導入數據前履行 SET UNIQUE_CHECKS=0,封閉獨一性校驗,在導入停止後履行SET UNIQUE_CHECKS=1,恢復獨一性校驗,可以進步導入的效力。

3. 假如運用應用主動提交的方法,建議在導入前履行SET AUTOCOMMIT=0,封閉主動提交,導入停止後履行SET AUTOCOMMIT=1,翻開主動提交,也能夠進步導入效力。

優化INSERT語句

當停止數據INSERT的時刻,可以斟酌采取以下幾種方法停止優化

1. 假如同時從一個客戶拔出許多行,盡可能應用多個值表的INSERT語句,這類方法將年夜年夜延長客戶端與MySQL數據庫的鏈接、封閉等消費,使得效力比離開履行的單個INSERT語句快.

例如:

insert into test values(1,2)
insert into test values(3,4)
insert into test values(5,6)

將下面三句改成:insert into test values(1,2),(3,4),(5,6)......

2. 假如從分歧客戶拔出許多行,能經由過程應用INSERT DELAYED 語句獲得更高的速度。

DELAYED 的寄義是讓INSERT 語句立時履行,其實數據都被放在內存的隊列中,並沒有真正寫入磁盤,這比每條語句分離拔出要快很多;LOW_PRIORITY恰好相反,在一切其他用戶對表的讀寫完後才停止拔出。

3. 將索引文件和數據文件分在分歧的磁盤上寄存

4. 假如停止批量拔出,可以增長bulk_insert_buffer_size變量值的辦法來進步速度,然則,這只能關於MyISAM表應用。

5. 當從一個文本文件中裝載一個表時,應用LOAD DATA INFILE。 這平日比應用許多insert語句快20倍閣下。

上面是mysql 機能優化的一些其它須要留意的處所,年夜家聯合和,充足施展mysql的機能。
mysql數據庫查詢優化
MySQL優化全攻略-相干數據庫敕令
mysql 數據庫中my.ini的優化 2G內存針對站多 抗壓型的設置
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved