mysql insert into select 效率怎么样(六、My**L数据库之数据插入(insert into))
本文目录
- 六、My**L数据库之数据插入(insert into)
- 关于mysql大量数据insert into 的时候问什么执行起来慢
- mysql视图 会提升查询效率吗
- 如何优化My**L insert性能
- mysql 只用insert into 每秒能插入多少,152KB每行, 普通linux 2cpu
六、My**L数据库之数据插入(insert into)
本节介绍数据的插入,复制数据到另一张表的Sql语法,主要语法有: insert into,insert into select,select into from 等用法,下面将一一为大家详细说明:
以下面两张表进行sql脚本说明
insert into有两种语法,分别如下:
语法1:INSERT INTO table_name VALUES (value1,value2,value3,...); --这种形式无需指定要插入数据的列名,只需提供**入的值即可:
语法2:INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...); --这种形式需指定要插入数据的列名,插入的值需要和列名一一对应:
eg:insert into customer values(’1006’,’14006’,’王欣欣’,’27’,’深圳市’); --向表customer插入一条数据
eg:insert into customer values(’1007’,’14007’,’孟一凡’,’27’,’’); --向表customer插入一条数据,最后一个值不填表示对应的值为空,非必填项可以不用插入值
eg:insert into customer (cus_id,cus_no,cus_name,cus_age,cus_adds) values(’1008’,’14008’,’孔凡’,’26’,’广州市’); --向表customer插入一条数据,插入的值与列名一一对应
详解:insert into select --表示从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
语法1:INSERT INTO table_name2 SELECT * FROM table_name1; --表示将表table_name1中复制所有列的数据插入到已存在的表table_name2中。**入数据的表为table_name2,切记不要记混了。
eg:insert into customer select * from asett --将表asett中所有列的数据插入到表customer中
语法2:INSERT INTO table_name2 (column_name(s)) SELECT column_name(s) FROM table_name1; --指定需要复制的列,只复制制定的列插入到另一个已存在的表table_name2中:
eg:insert into customer (cus_id,cus_no) select ast_id,ast_no from asett --将表asett中列ast_id和ast_no的数据插入到表customer对应的cus_id,cus_no列中
详解:从一个表复制数据,然后把数据插入到另一个新表中。
语法1:SELECT * INTO newtable FROM table1; --复制所有的列插入到新表中:
eg:select * into customer from asett --将asett表中数据插入到customer中,**入的 表customer不存在
eg:select * into customer from asett where ast_id = ’1008’ --只复制表asett中ast_id=1008的数据插入到customer中,**入的 表customer不存在
语法2:SELECT column_name(s) INTO newtable FROM table1; --只复制指定的列插入到新表中:
eg:select ast_id,ast_no into customer from asett --将asett表中列ast_id,ast_no数据插入到customer中,**入的 表customer不存在
区别1:insert into customer select * from asett where ast_id=’1009’ --插入一行,要求表customer 必须存在
区别2:select * into customer from asett where ast_id=’1009’ --也是插入一行,要求表customer 不存在
区别3:select into from :将查询出来的数据复制到一张新表中保存,表结构与查询结构一致。
区别4:insert into select :为已经存在的表批量添加新数据。
关于mysql大量数据insert into 的时候问什么执行起来慢
使用ETL工具,平时我一般处理的记录不多百万没试过,10W条记录大概不到2分钟,有人用百万的测试记录。 ETL厂商ReikingIBM information server(datastage)informatic基本架构支持运行平台windows/unix/linuxwindows/unix/linuxwindows/unix/linux数据访问模式支持绝大部分支持绝大部分支持绝大部分支持数据抽取方式支持生成文件(落地)再导入;直接导入;消息协议直接导入;导入方式,数据导入支持批量加载(sql loader方式)、insert模式、行删除模式
其中insert模式是插入到临时表,然后更新,需要手工写update语句,配置比较复杂,
行删除模式这种方式不考虑,性能肯定会非常差。
批量加载模式,是对方工程师推荐的测试方案,其性能应该是最快的.以下测试是基于批量加载模式直接导入;数据导入目的库有两种加载方式
normal和bulk,即普通插入和批量加载。
批量加载需要先将索引drop掉,在加载完成后重新创建,但是这种方式在对付
大数据量时很慢,例如下文测试hisdeliver 1个月的数据抽取,286万记录,需要4分47秒,比普通插入
要慢很多。下面的测试结果由informatic的工程师,其基于normal模式实时增量ETL支持递增字段实现,触发器模式,支持Oracle CDCCDC,实现秒级别的增量CDC,实现秒级别的增量,另外付费购买性能单表hisdeliver抽取,记录数124810,耗时比较1分16秒17秒15秒单表hisdeliver抽取,记录数2859999,耗时比较22分12秒6分12秒2分58秒采集sqlserver数据;采集表zygd(记录数:597872)测试报错41秒16秒流程中是否支持并行加载支持支持支持并行加载性能client 730279行5分钟1分14秒2分02秒clientinfo 739278行7分钟2分18秒1分50秒stockholder 108378911分钟2分59秒3分01秒hisdeliver 124810行未加载48秒20秒
mysql视图 会提升查询效率吗
时间的快慢主要由索引决定,在索引都最优化的情况下才与数据量有关。 视图不可能明显加快的查询速度,只是编程方便而已。
如何优化My**L insert性能
1. 一条**L语句插入多条数据。
常用的插入语句如:
INSERTINTO`insert_table` (`datetime`, `uid`, `content`, `type`) VALUES(’0’, ’userid_0’, ’content_0’, 0);
INSERTINTO`insert_table` (`datetime`, `uid`, `content`, `type`) VALUES(’1’, ’userid_1’, ’content_1’, 1);
修改成:
INSERTINTO`insert_table` (`datetime`, `uid`, `content`, `type`) VALUES(’0’, ’userid_0’, ’content_0’, 0), (’1’, ’userid_1’, ’content_1’, 1);
修改后的插入操作能够提高程序的插入效率。这里第二种**L执行效率高的主要原因有两个,一是减少**L语句解析的操作, 只需要解析一次就能进行数据的插入操作,二是**L语句较短,可以减少网络传输的IO。
这里提供一些测试对比数据,分别是进行单条数据的导入与转化成一条**L语句进行导入,分别测试1百、1千、1万条数据记录。
性能测试:这里提供了同时使用上面两种方法进行INSERT效率优化的测试。即多条数据合并为同一个**L,并且在事务中进行插入。
2. 在事务中进行插入处理。把插入修改成:
START TRANSACTION;
INSERTINTO`insert_table` (`datetime`, `uid`, `content`, `type`) VALUES(’0’, ’userid_0’, ’content_0’, 0);
INSERTINTO`insert_table` (`datetime`, `uid`, `content`, `type`) VALUES(’1’, ’userid_1’, ’content_1’, 1);
...
COMMIT;
使用事务可以提高数据的插入效率,这是因为进行一个INSERT操作时,My**L内部会建立一个事务,在事务内进行真正插入处理。通过使用事务可以减少创建事务的消耗,所有插入都在执行后才进行提交操作。
这里也提供了测试对比,分别是不使用事务与使用事务在记录数为1百、1千、1万的情况。
从测试结果可以看到,insert的效率大概有50倍的提高,这个一个很客观的数字。
mysql 只用insert into 每秒能插入多少,152KB每行, 普通linux 2cpu
自己实验一下。Sql语句大大小。和表结构。内容结构都有关系。
php,Mysql 配置也有关系。
自己测试一下。循环插入,求一下平均数。
更多文章:
废品回收html5模板(老板让我写一个废旧物资回收企业简介,请问哪里有范本啊)
2026年4月28日 21:20
powerful woman(关于Oprah Winfrey)
2026年4月28日 20:40
美国新冠疫情最新消息今天新增(美国新冠疫情确诊人数有增加吗)
2026年4月28日 20:00
asp财务上代表什么意思(ASP在财务中是什么东西的简写中文名称和英文全称是什么)
2026年4月28日 19:40
structure动词词性的用法(翻译:reboot system now.这句什么意思)
2026年4月28日 19:20






