MySQL的SQL优化之插入数据

如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。

        insert into tb_test values(1,'tom');

        insert into tb_test values(2,'cat');

        insert into tb_test values ( 3 , 'jerry' );
        
        ......

 

非大批量插入数据

1).批量插入数据

         Insert into tb_test values ( 1 , 'Tom' ),( 2 , 'Cat' ),( 3 , 'Jerry' );

2).手动控制事务

        start transaction;

        insert into tb_test values ( 1 , 'Tom' ),( 2 , 'Cat' ),( 3 , 'Jerry' );
        insert into tb_test values ( 4 , 'Tom' ),( 5 , 'Cat' ),( 6 , 'Jerry' );
        insert into tb_test values ( 7 , 'Tom' ),( 8 , 'Cat' ),( 9 , 'Jerry' );
        commit;



3).主键顺序插入

        主键顺序插入,性能要高于乱序插入。
        
        主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3
        主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89

大批量插入数据

        如果一次性需要插入大批量数据(比如: 几百万的记录),使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。

        
        
        -- 客户端连接服务端时,加上参数 -–local-infile
        mysql –-local-infile -u root -p
        -- 设置全局参数 local_infile1,开启从本地加载文件导入数据的开关
        set global local_infile = 1 ;
        -- 执行 load指令将准备好的数据,加载到表结构中
        load data local infile '/root/sql1.log' into table table_name fields te rmi nated by ',' lines terminated by '\n' ;
        
         '/root/sql1.log'  是文件要为绝对路径, table_name  为表名,fields terminated by ',' 申明字段以','为分隔符, lines terminated by '\n' 申明每行以回车为分隔符
        

猜你喜欢

转载自blog.csdn.net/weixin_59526725/article/details/125969534