資料庫智能優化
此文章主要向大家介紹的是MySQL資料庫優化 其中還包括MySQL資料庫的性能優化 常用的SQL語句的優化以及MySQL資料庫對INSERT語句進行優化的實際操作方案的描述 望你會有所收獲
MySQL InnoDB 的性能問題討論
MySQL性能優化
InnoDB delete from xxx速度暴慢原因
推薦圈子: mysql研究
更多相關推薦 定期分析表和檢查表
分析表的語法如下
引用
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb _name[ tbl_name]
以上語句用於分析和存儲表的關鍵字分布 分析的結果將可以使得系統得到准確的統計信息 使得SQL能夠生成正確的執行計劃 如果用戶感覺實際執行計劃並不是預期的執行計劃 執行一次分析表可能會解決問題 在分析期間 使用一個讀取鎖定對表進行鎖定 這對於MyISAM DBD和InnoDB表有作用
例如分析一個數據表
引用
*** yze table table_name
檢查表的語法如下
引用
CHECK TABLE tb _name[ tbl_name] [option] option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
檢查表的作用是檢查一個或多個表是否有錯誤 CHECK TABLE 對MyISAM 和 InnoDB表有作用 對於MyISAM表 關鍵字統計數據被更新
CHECK TABLE 也可以檢查視圖是否有錯誤 比如在視圖定義中被引用的表不存在
定期優化表
MySQL資料庫優化表的語法如下
引用
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb _name [ tbl_name]
如果刪除了表的一大部分 或者如果已經對含有可變長度行的表(含有 VARCHAR BLOB或TEXT列的敗宏表)進行更多更銀枯畝改 則應使用OPTIMIZE TABLE命令來進行表優化 這個命令可以將表中的空間碎片進行合並 並且可以消除由於刪除或者更新造成的空間浪費 但OPTIMIZE TABLE 命令只對MyISAM BDB 和InnoDB表起作用
例如 optimize table table_name
鋒森注意 *** yze check optimize執行期間將對表進行鎖定 因此一定注意要在資料庫不繁忙的時候執行相關的操作
常用的SQL優化
我們在開發的時候常常用到的SQL語句 無非是INSERT GROUPBY等等 對於這些SQL語句 我們怎麼進行優化?
大批量插入數據
當用load命令導入數據的時候 適當的設置可以提高導入的速度
對於MyISAM存儲引擎的表 可以通過如下方式快速的導入大量的數據
引用
ALTER TABLE tb _name DISABLE KEYS;
loading the data
ALTER TABLE tb _name ENABLE KEYS;
DISABLE KEYS 和 ENABLE KEYS 用來打開或者關閉MyISAM表非唯一索引的更新 在導入大量的數據到一個非空的MyISAM表時 通過設置這兩個命令 可以提高導入的效率
對於導入大量的數據到一個空的MyISAM表時 默認就是先導入數據然後才創建索引的 索引不用進行設置
引用
load data infile /home/mysql/text_txt into table text
對於InnoDB類型的表 這種方式不能提高導入數據的效率 但也有幾種針對InnoDB類型的表進行MySQL資料庫優化的方式
因為InnoDB類型的表式按照主鍵的順序保存的 所以將導入的數據按照主鍵的順序排序 可以有效提高導入數據的效率
在導入數據前執行 SET UNIQUE_CHECKS= 關閉唯一性校驗 在導入結束後執行SET UNIQUE_CHECKS= 恢復唯一性校驗 可以提高導入的效率
如果應用使用自動提交的方式 建議在導入前執行SET AUTOMIT= 關閉自動提交 導入結束後執行SET AUTOMIT= 打開自動提交 也可以提高導入效率
MySQL資料庫優化INSERT語句
當進行數據INSERT的時候 可以考慮採用以下幾種方式進行優化
如果同時從一個客戶插入很多行 盡量使用多個值表的INSERT語句 這種方式將大大縮短客戶端與資料庫的鏈接 關閉等消耗 使得效率比分開執行的單個INSERT語句快
例如
insert into test values( )
insert into test values( )
insert into test values( )
將上面三句改為:insert into test values( ) ( ) ( )
如果從不同客戶插入很多行 能通過使用INSERT DELAYED 語句得到更高的速度
DELAYED 的含義是讓INSERT 語句馬上執行 其實數據都被放在內存的隊列中 並沒有真正寫入磁碟 這比每條語句分別插入要快得多 LOW_PRIORITY剛好相反 在所有其他用戶對表的讀寫完後才進行插入
將索引文件和數據文件分在不同的磁碟上存放
如果進行批量插入 可以增加bulk_insert_buffer_size變數值的方法來提高速度 但是 這只能對於MyISAM表使用
當從一個文本文件中裝載一個表時 使用LOAD DATA INFILE 這通常比使用很多insert語句快 倍左右
lishixin/Article/program/MySQL/201311/29324
B. 資料庫系統優化的人工智慧自動SQL優化
人工智慧自動SQL優化出現在90年代末。目前在商用資料庫領域,LECCO Technology Limited(靈高科研有限公司)擁有該技術,並提供使用該技術的自動優化產品LECCO SQL Expert,它支持Oracle、Sybase、MS SQL Server和IBM DB2資料庫平台。該產品針對資料庫應用的開發和維護階段提供的模塊有:SQL語法優化器、PL/SQL集成化開發調試環境(IDE)、掃描器、資料庫監視器等。其核心模塊SQL 語法優化器的工作原理為:①輸入一條源SQL語句;②「人工智慧反饋式搜索引擎」對輸入的SQL語句,結合檢測到的資料庫結構和索引進行重寫,產生N條等效的SQL語句輸出;③產生的N條等效SQL語句再送入「人工智慧反饋式搜索引擎」進行重寫,直至無法產生新的輸出或搜索限額滿;④對輸出的SQL語句進行過濾,選出具有不同執行計劃的SQL語句;⑤對得到的SQL語句進行批量測試,找出性能最好的SQL語句。
C. SQL資料庫優化的方法有哪些
在進行軟體開發過程中,資料庫的使用是非常重要的,但是資料庫有很多種,不同資料庫的使用方法是不同的。進行軟體開發過程中,至少需要掌握一種資料庫的使用方法。SQL資料庫語法簡單、操作方便和高效,是很多人最優的選擇,但是SQL語句會受到不同資料庫功能的影響,在計算時間和語言的效率上面需要進行優化,根據實際情況進行調整。下面電腦培訓為大家介紹SQL資料庫的優化方法。
一、適當的索引
索引基本上是一種數據結構,有助於加速整個數據檢索過程。唯一索引是創建不重疊的數據列的索引。正確的索引可以更快地訪問資料庫,但是索引太多或沒有索引會導致錯誤的結果。IT培訓認為如果沒有索引,處理速度會變得非常慢。
二、僅索引相關數據
指定需要檢索數據的精度。使用命令*和LIMIT代替SELECT*。調整資料庫時,必須使用所需的數據集而不是整個數據集,尤其是當數據源非常大時,指定所需的數據集,能夠節省大部分時間。
三、根據需求使用或避免臨時表
如果代碼可以用簡單的方式編寫,那麼永遠不要使臨時表變得復雜。當然,如果數據具有需要多個查詢的特定程序,北大青鳥建議在這種情況下,使用臨時表。臨時表通常由子查詢交替。
四、避免編碼循環
避免編碼循環是非常重要的,因為它會減慢整個序列的速度。通過使用具有單行的唯一UPDATE或INSERT命令來避免編碼循環,並且昆明北大青鳥發現WHERE命令能夠確保存儲的數據不被更新,這樣能夠方便在找到匹配和預先存在的數據時被找到。
D. 資料庫的性能優化有哪些
在資料庫優化上有兩個主要方面:
安全:數據可持續性。
性能:數據的高性能訪問。
優化的范圍有哪些
存儲、主機和操作系統方面:
主機架構穩定性
I/O 規劃及配置
Swap 交換分區
OS 內核參數和網路問題
應用程序方面:
應用程序穩定性
SQL 語句性能
串列訪問資源
性能欠佳會話管理
這個應用適不適合用 MySQL
資料庫優化方面:
內存
資料庫結構(物理&邏輯)
實例配置
說明:不管是設計系統、定位問題還是優化,都可以按照這個順序執行。
資料庫優化維度有如下四個:
硬體
系統配置
資料庫表結構
SQL 及索引
優化選擇:
優化成本:硬體>系統配置>資料庫表結構>SQL 及索引。
優化效果:硬體<系統配置<資料庫表結構