提高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");//解锁

  

 

(待续)

posted @ 2015-09-01 16:44  到站了  阅读(2360)  评论(0编辑  收藏  举报