您好,登录后才能下订单哦!
本篇内容主要讲解“MYSQL数据库优化知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MYSQL数据库优化知识点有哪些”吧!
通常我们在进行数据库操作时,一般来说我们要访问数据库中的某一张表时,读取者首先要获取这张表的锁,如果这时候有针对这张表的写入操作到达,那么写入者会一直等待,当读取者完成读取操作时,读取者对这张表的锁就会解除,如果这个写入者依然还在等待队列,则由写入者对这张表进行加锁,直到写入者对表的写入操作完成才会将对表加的锁解除。
这里就会有一个问题需要我们去思考:如果等待队列中由一个写入操作和一个读取操作都在等待访问这张表时,MYSQL的调度策略是什么样的呢?
在MYSQL中,默认的调度策略是写入者优先于读取者,也就是说如果等待队列中同时存在一个写入操作和一个读取操作,那么写入者首先进行操作等待它完成操作并解放锁后,读取者开始操作,所以说要提高MYSQL的更新数据效率,应该着重考虑怎样减少锁的竞争,减少写入操作的等待时间。
1.INSERT语句
我们mysql的插入语句如上图所示,但是当我们需要插入大量数据的时候,这样的语句就会出现性能问题。例如我们需要一次性插入一万条数据时,那么我们需要一万条的insert语句,每一条语句都需要提交到关系引擎那里进行解析与优化,然后才做真正的插入工作。这样就会大大的降低性能,那我们可以采取什么策略来提高插入语句的性能呢?
(1)插入数据时同时插入多条,经过测试,同时插入10条数据时效率最高。
(2)采用顺序主键,例如自增主键,让插入的顺序尽可能顺序主键。
(3)尽量使用REPLACE语句替代INSERT语句。
2.UPDATE语句
上图就是我们update的基本语句,其实对于更新语句我们很容易就可以理解,其实就是对于表中已存在的数据进行修改操作,那么在更新操作中我们可以进行什么样的优化呢?
(1)和我们的插入语句原理一样,当我们需要更新大量数据的时候,这样的语句就会出现性能问题。所以可以同时更新多条记录。
(2)尽量不要修改主键字段,其实这个也解释过了,主键我们尽量使用顺序主键。
(3)尽量小化含有UPDATE触发器的更新操作,可能有读者不了解什么是触发器,建议先百度补充下知识来源。
(4)尽量避免更新建有很多索引的列。
(5)尽量避免更新处在WHERE字句条件中的列。
3.DELETE语句
delete语句是用来删除数据库中表的数据,一般分为两种,直接删除表中所有数据和删除符合某种条件的表中数据。
在MYSQL中,truncate table和delete语句都可以删除表里面所有数据,但是truncate table删除速度更快,而且删除后不记录mysql日志,不可以恢复数据,所以必须谨慎使用。而且如果没有外键关联的情况下,执行truncate table是先drop table,然后再创建一个新的空表,速度当然远远快于逐条删除行数据的delete语句。当表有外键关联,truncate table删除数据方式也是逐条删除,如果外键指定级联删除,则关联的子表数据也会被删除,如果未指定级联删除,则删除碰到父行关联子表,将会报错。
DELETE语句和INSERT语句一样会对即将操作的表进行加锁,如果表被加锁了,其他操作就无法执行了,所以一种比较简单的策略就是交给数据库去拆分,制定一种执行策略,比如每次限制处理1000条数据。对于量级数据,删除数据可以先删除索引,,然后删除其中的无用数据,删除完成重新创建索引,这比逐条删除的效率绝对是质的变化。
4.REPLACE语句
刚才在INSERT语句中我讲到了其中一种优化策略就是可以使用replace语句去替代insert语句,比如一个表中已经在一个字段中建立了唯一索引,当向这个表中使用已经存在的键值插入一条记录,将会出现错误,这时我们就可以使用replace语句来替代insert语句,这样我们的执行结果就是用新纪录的值去替代原来记录的值。
5.REPLACE语句与INSERT语句的区别:
使用replace插入数据时,如果记录不重复,则功能和insert语句完全一致,而且replace语句有一个显而易见的有点就是将delete语句与insert语句合二为一,形成了一个原子操作,所以进行事务操作时复杂性大大降低了,这也是我们提倡使用replace语句替代insert语句的原因所在。
在使用replace语句时,表中必须有并且唯一的主键或者唯一索引,否则replace语句将没有任何意义。
6.REPLACE语句与UPDATE语句的区别:
update语句在没有匹配记录时不进行任何操作,而replace语句再有重复记录时更新,没有重复记录时进行插入操作。update语句可以根据子句条件对一条记录的某一部分字段进行更新,而replace语句则是在发现有重复记录时将记录彻底删除,再插入新的记录。所以对于replace语句其实可以理解为是insert语句与update语句的结合。
到此,相信大家对“MYSQL数据库优化知识点有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。