如何提高Mysql批量插入和更🔥新,数据库

如何提高Mysql批量插入和更新,数据库

使用场景:
测试时需要插入100w甚至1000w,1亿以上的数据,跑sql脚本循环插入或者程序遍历插入非常慢。

解决思路:

写入文件

文件导入到mysql中

实现举例(以100w为例)
1. 使用sql 生成100w数据到txt文件中。
2. 数据库中将数据导入表中:
耗费时间:
本方案的缺点:
1.权限。 非admin用户没有导入。
2. 写文件代码。对测试人员来说,写文件不仅仅限于任何语言,可以使用任何语言实现之。

数据库访问量很大时,如何做优化

当数据量很大的时候,主要从以下几点入手。如何提高Mysql批量插入和更🔥新,数据库

索引:

任何时候创建索引都是第一选择,当数据量很大嗯时候,有没有索引的查询速度可以说是指数级别的差距,通过索引可以大幅度提升检索效率。

分表:

当数据量非常大的时候,索引可能已经不起作用了,这个时候我们就需要对数据分表存储,可以水平分表和垂直分表,通过分表,一个表的数据♀量变少了,就是复杂问题简单处理,细分处理。

分布式:

一个数据库的数据量过大的时候,我们可以考虑部署多个数据库,这样每个数据库的数据量相对来说减少了。

缓存:

对热数据进行缓存,28定律存在于整个宇宙中,经常检索的数据一定是少部分数据,我们缓存它们,可以大大提升数据库查询效率。

如何构建高性能MySQL

可以从以下几个角度来说。

一,设计时。

设计时有一下几个方面可以优化。

a.表引擎的选择。

mysql最大的特点之一就是可以按表自主选择表的引擎。不同引擎的区别在于对事务的支持的颗粒度,数据存储格式与等。mysql事务的控制级别由细到粗有行锁,gap锁,页锁,表锁。对锁的颗粒度支持的越细,语句的执行速度理论上就会越慢。innodb是支持行锁的,所以相对myisam来说curd的速度相对都会慢一些。当存一些不是特别重要,允许出错的♗或者表数据更新频率不高的数据时,可以选择myisam。比如存日志,以及一些配置数据如全国行政区划数据。mysql的默认引擎是innodb,很多人不思考就选择默认的引擎,这是不好的习惯。

b.垂直分割与水平分割,分区与分表。

根据对数据增长的预判,可以考虑对数据进行分割。分割的思路有两个纬度,一个是垂直分割,一个是水平分割。

垂直分割的意思是把逻辑上属于一个表的字段分成多个表来设计。这可以降低单表的数据大小,提高查询速度。一次查询很多时☺候并不需要查出所有字段,如果所有字段都在一个表内就会影响查询速度,可以根据实际情况把查询频率相同的字段进行分类,然后据此分表。比如用户表,有账号密码,还有一些其他的信息。很多人的习惯是设计成一个表。但在一些高用户活跃度的系统,把账号密码单独设计成一个表不失为一个好的选择。

水平分割就是把不同行的数据按照一定的规则放到不同的数据实体中。mysql中水平分割有分区与分表两种,分区是mysql的又一个重要特点。分区是把数据分别存在不同的区块,但还是在同一个表内,所以是对程序无感知的。分表则是设计多个结构一样的表,对于mysql来说这些表是没有关联的,但对于程序在逻辑上认为他们是同一个表,这需要程序在执行语句前进行表的选择。分区与分表的区别这里就不展开讨论。

c.索引

大凡学过mysql都知道索引,但一个被忽视的事实是,索引并不是越多越好。太多的索引会影响插入与更新的速度。索引的设计只应该给高频查询,一些低频的卐查询无需加索引。具体的索引类型,索引就不展开了。值得说一下的是,设计时跟实际运行时的情况可能不太一致,可以找出那些慢查询,然后用explain来查看一下语句对索引的命中情况。

二,语句执行时。

哎,手机码字,看评论效果再更吧。

如何通过优化sql语句提高数据库查询效率

通过优化SQL语句,提高数据库查询效率,我总结了有这么几个方面:

减少数据访问

看起来像一句废话,少访问数据当然可以提高速度了,减少数据访问有这么几个方法:

  • 创建并正确使用索引

我们经常用到的就是B-TREE索引,我们经常说到的【索引】也指的是【B-TREE索引】。

正确使用索引可以让查询效率翻倍,但是如果使用不正确,也会对❀效率降低很多,比如这几种情况就会造成索引失效:

  1. 不等于操作:<>? 、not in('')

  2. 进行了运算后的字段:column+1(简单的运算),function(column)(函数)

  3. 含前导模糊查询:like '%xxx'

  4. IS NULL

  5. 隐式类型转换:column是char类型,但是写成column = 123(右边是另外一种类型)

只通过索引访问数据

有些时候,我们只需要访问表中的某几个列的数据,我们可以为这几个字段建立一个组合索引,这样的话只通过索引就可以得到数据,可以较小IO的开销。比如:

select name,gender from users where age='25';

如果这个SQL用的频率很高,那么我们可以建立一个组合索引:

create index index_xxx on users(name,gender,age);

在执行这个sql的时候,数据全部都是通过索引找到的,都不需要访问users表。

优化SQL执行计划

执行计划表示SQL在执行时候的算法,有的时候SQL语句很复杂,就需要优化SQL的执行计划去提高SQL的执行效率。

可能不和SQL有直接的关系,但确实效率提升很明显,比如:

数据分页处理只返回需要的字段减少交互次数(batch DML)使用绑定变量(可以减少数据库服务器CPU运算)

但是要注意,对SQL不要过度优化,满足需求即可。

希望我的回答能够帮助到你!

MySQL CPU占用过高怎么处理

1138 浏览 7 回答

如何提高Mysql批量插入和更🔥新,数据库

原创文章,作者:Ame,如若转载,请注明出处:https://www.lbseo.cn/13648.html