mysql千万级数据查询select、插入insert慢 可能原因总结

mysql千万级数据查询select、插入insert慢 可能原因总结

表连表查询 并 insert ,insert into …select …from…

insert into T1(XX,XX)
select T2.date,
T3.time
from T2 b inner join (select * from T3)c on c.XX=b.XX;

1.(select * from T3)c 与 T3 表名直接写 ,这两种写法亲自测试有些细微的耗时差距,具体我也不清楚,可以亲自试验一下自行选择
2.inner join…on… 与 select …from …where…二者写法耗时结果差别不大
3.能用双表联查就千万千万不要用三表联查,哪怕第三个表只有几十条数据,查询耗时也是成指数级上升的

我选择双表联查生成临时表再与第三个表联查,速度快很多

4. 条件的选择 on… /where …

尽量使用on/where …XXX = T2.XXX 而不是 in (…xxx.,xxx)二者查询时间差距非常大

5.主表有条件先select一遍主表,关联表有条件最好放最后where后(注意:条件放最后和放关联表中查询有时是不一样的)

千万级别数据插入数据库中时一些mysql的设置

1.这些设置不确定一定有很大帮助,没有细致的调试过,自行辨别

– 最大数据量设置
show variables like ‘max_allowed_packet’ ;
SET GLOBAL max_allowed_packet=61210241024;

– 设置超时时间
set net_read_timeout=120;
set net_write_timeout=900;

show variables like “%tmp%”;
SET GLOBAL tmp_table_size =410241024*1024;
set global innodb_flush_log_at_trx_commit=0;

– 查询buffer类全局字段设置
show variables like “%_buffer%”;
SET GLOBAL innodb_buffer_pool_size=102410246000;
SET @@global.bulk_insert_buffer_size = 102410241000;

– 查询所有参数设置
show variables;

SET autocommit=0;
– 关闭唯一性检查
SET UNIQUE_CHECKS=0;
– 禁用外键检查语句为:
SET global FOREIGN_KEY_CHECKS=0;

– 禁止自动提交语句为:
SET AUTOCOMMIT=0;
set global innodb_flush_log_at_trx_commit=2; #禁止时时同步日志到磁盘
set global max_allowed_packet=1024*1024; # 配置max_allowed_packet为1G

set global innodb_io_capacity =2000 ;
set global innodb_io_capacity_max =20000 ;

set global innodb_autoextend_increment = 1024*100 ;
– mysql日志大小
set global innodb_log_file_size=128M;

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 插入数据的问题可能与多个因素有关。首先,可以考虑使用"on/where ...XXX = T2.XXX"而不是"in (...xxx.,xxx)"来进行查询,因为这两种查询的时间差距非常大。其次,对于主表和关联表的条件,最好将主表的条件放在select语句的最前面,而将关联表的条件放在where语句的最后面。此外,对于千万级别的数据插入数据库中,可以考虑一些MySQL的设置,但这些设置的具体效果可能需要根据实际情况进行细致的调试和辨别。另外,对于insert select语句的写法,可以参考以下几点:1.在insert语句中,可以使用"insert into 表名1 (列名) select (列名) from 表名2"的形式来插入数据。2.在select语句中,可以使用"inner join ... on ..."来进行双表联查,而不是使用三表联查,因为即使第三个表只有几十条数据查询耗时也会成指数级上升。综上所述,通过优化查询语句的写法和调整数据库的设置,可以提高insert select插入数据的速度。 #### 引用[.reference_title] - *1* *3* [mysql千万级数据查询select插入insert 可能原因总结](https://blog.csdn.net/Murinedj/article/details/126779087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MySQL ------ 插入数据INSERTinsert select)(二十)](https://blog.csdn.net/weixin_36337756/article/details/113223892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值