4、提高插入数据的速度
在 MySQL 中,向數據表插入數據時,索引、唯一性檢查、數據大小是影響插入速度的主要因素。本節將介紹優化插入數據速度的幾種方法。
根據不同情況,可以分別進行優化。
對于 MyISAM 引擎的表,常見的優化方法如下:
1. 禁用索引
對非空表插入數據時,MySQL 會根據表的索引對插入的記錄進行排序。插入大量數據時,這些排序會降低插入數據的速度。為了解決這種情況,可以在插入數據之前先禁用索引,等到數據都插入完畢后在開啟索引。
禁用索引的語句為:
ALTER TABLE table_name DISABLE KEYS;重新開啟索引的語句為:
ALTER TABLE table_name ENABLE KEYS;對于新創建的表,可以先不創建索引,等到數據都導入以后再創建索引,這樣可以提高導入數據的速度。
2. 禁用唯一性檢查
插入數據時,MySQL 會對插入的數據進行唯一性檢查。這種唯一性檢驗會降低插入數據的速度。為了降低這種情況對查詢速度的影響,可以在插入數據前禁用唯一性檢查,等到插入數據完畢后在開啟。
禁用唯一性檢查的語句為:
SET UNIQUE_CHECKS=0;開啟唯一性檢查的語句為:
SET UNIQUE_CHECKS=1;3. 使用批量插入
在 MySQL 中,插入多條數據有 2 種方式。第一種是使用一個 INSERT 語句插入多條數據。INSERT 語句的情形如下:
INSERT INTO items(name,city,price,number,picture)VALUES ('耐克運動鞋','廣州',500,1000,'001.jpg'),('耐克運動鞋2','廣州2',500,1000,'002.jpg');第二種是一個 INSERT 語句只插入一條數據,執行多個 INSERT 語句來插入多條數據。INSERT 語句的情形如下:
INSERT INTO items(name,city,price,number,picture) VALUES('耐克運動鞋','廣州',500,1000,'001.jpg'); INSERT INTO items(name,city,price,number,picture) VALUES('耐克運動鞋2','廣州',500,1000,'002.jpg');一次性插入多條數據和多次插入數據所耗費的時間是不一樣的。第一種方式減少了與數據庫之間的連接等操作,其速度比第二種方式要快一些。所以插入大量數據時,建議使用第一種方法。
注意:如果能用 LOAD DATA INFILE 語句,就盡量用 LOAD DATA INFILE 語句。因為 LOAD DATA
INFILE 語句導入數據的速度比 INSERT 語句的速度快。
對于 InnoDB 引擎的表,常見的優化方法如下:
1. 禁用唯一性檢查
同 MyISAM 引擎相同,插入數據之前先禁用索引,等到數據都插入完畢后在開啟索引。
2. 禁用外鍵檢查
使用外鍵時,在子表中插入一條數據,首先會檢查主表中是否有相應的主鍵值,然后鎖定主表的記錄,在插入值。相比較,使用外鍵多了2步操作,速度會慢一些。
所以我們可以在插入數據之前禁止對外鍵的檢查,數據插入完成之后再恢復對外鍵的檢查。不多對于數據完整性要求較高的系統不建議使用。
禁用外鍵檢查語句為:
SET FOREIGN_KEY_CHECKS=0;恢復對外鍵的檢查語句為:
SET FOREIGN_KEY_CHECKS=1;3. 禁止自動提交
在《MySQL設置事務自動提交》一節我們提到 MySQL 的事務自動提交模式默認是開啟的,其對 MySQL 的性能也有一定得影響。也就是說如果你插入了 1000 條數據,MySQL 就會提交 1000 次,這大大影響了插入數據的速度。而如果我們把自動提交關掉,通過程序來控制,只要一次提交就可以了。
所以插入數據之前可以先禁止事務的自動提交,待數據導入完成之后,再恢復自動提交操作。
禁止自動提交語句為:
SET AUTOCOMMIT=0;恢復自動提交語句為:
SET AUTOCOMMIT=1;總結
以上是生活随笔為你收集整理的4、提高插入数据的速度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3、MySQL优化数据库结构的3种方法
- 下一篇: 3、Swing布局管理器