提高mysql的写入效率
1、一个插入多条数据(一个语句多个values)
2.对于大数据建议用 : LOAD DATA INFILE
语法:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char' ] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number LINES] [(col_name_or_user_var,...)] [SET col_name = expr,...)]
实例:
load data infile "E:/cs.txt" into table black_list3 fields terminated by ',' lines terminated by '\n' (name,gender,id_card);
解析:
load data infile "E:/cs.txt" //引入文件 into table black_list3 //插入表 fields terminated by ',' //字段以,逗号隔开 lines terminated by '\n' //记录条数以'\n',换行符隔开 (name,gender,id_card); //插入的字段
一、事务回滚
对于事务表强烈推荐:BEGIN和COMMIT
开启(BEGIN)事务之后,数据库不会进行提交,直到(COMMIT)才会提交到数据库,若是使用(ROOLBACK)则会回到begin开始的位置,中间的写入语句都是无效的。
优点:写入速度快,安全好,易控制
原理:不会自动提交直到commit
缺点:仅支持 InnoDB、BDB
mysql_query("BEGIN");//开始事务定义 {写入操作} {失败} mysql_query("ROOLBACK");//判断当执行失败时回滚 {成功} mysql_query("COMMIT");//执行事务 mysql_query("END");//结束
二、自动提交为0
禁用自动提交,会在所有的操作完成之后,再进行一个提交。从而加快写入的速度
mysql_query("SET AUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行 {写入操作} mysql_query("SET AUTOCOMMIT=1");//设置为自动提交,因为MYSQL默认立即执行
三、锁表
锁定表可以加速用多个语句执行的INSERT操作,这样性能会提高,因为索引缓存区仅在所有INSERT语句完成后刷新到磁盘上一次。一般有多少INSERT语句即有多少索引缓存区刷新。如果能用一个语句插入所有的行,就不需要锁定。
mysql_query("LOCK TABLES black_list1 WRITE");//锁表 {写入操作} mysql_query("UNLOCK TABLES");//解锁
(待续)