当前位置: 首页 > 科技观察

抛开复杂的架构设计,MySQL优化思想基本都在这了

时间:2023-03-17 00:26:22 科技观察

抛开复杂的架构设计不谈,MySQL优化的思路基本上就是提高用户相应的速度,同时尽可能节省系统资源,让系统提供更大的负载。一、优化概述二、优化作者把优化分为两类:软优化和硬优化。软优化一般是对数据库进行操作;而硬优化就是对服务器硬件和参数设置进行操作。1、软优化1)查询语句优化首先,我们可以使用EXPLAIN或DESCRIBE(简称:DESC)命令来分析查询语句的执行信息。示例:DESCSELECT*FROM`user`display:显示索引数、查询数据读取数据等信息。2)优化子查询在MySQL中,尽量使用JOIN代替子查询。因为子查询需要嵌套查询,嵌套查询时会创建临时表,临时表的创建和删除会有较大的系统开销,而join查询不会创建临时表,所以效率比嵌套子查询高。3)使用索引建立索引是提高数据库查询速度的重要途径之一。使用索引的三大注意事项包括:LIKE关键字匹配以'%'开头的字符串,不会使用索引;OR关键字的两个字段如果使用了所有索引,查询将只使用索引;使用多列索引必须满足最左匹配。4)拆表对于字段较多的表,如果有些字段使用频率较低,则应将其拆散,组成新表。5)中间表可以为将要被大量连接查询的表创建一个中间表,从而减少查询带来的连接耗时。6)添加冗余字段类似于创建中间表,添加冗余也是为了减少连接查询。7)分析表、校验表、优化表分析表主要是分析表中关键字的分布情况;查表主要是检查表是否有错误;优化表主要是消除删除或更新造成的表空间浪费。分析表:使用ANALYZE关键字,如ANALYZETABLEuserOp:表示执行的操作;msg_type:信息类型,包括status、info、note、warning、error;Msg_text:显示信息。查表:使用CHECK关键字,如CHECKTABLEuser[option]。选项仅对MyISAM有效。一共有五个参数值:QUICK:不扫描行,不检查错误的连接;FAST:只检查没有正确关闭的表;CHANGED:只检查自上次检查后发生变化的表和未正确关闭的表;MEDIUM:扫描行,验证删除的连接是否有效,也可以计算每行的关键字校验和;EXTENDED:最全面的检查,全面搜索每一行关键词。优化表:使用OPTIMIZE关键字,如OPTIMIZE[LOCAL|NO_WRITE_TO_BINLOG]TABLEuser;LOCAL|NO_WRITE_TO_BINLOG表示不写日志,优化表只对VARCHAR、BLOB和TEXT有效,OPTIMIZETABLE语句可以消除文件碎片。执行时加了只读锁。2.硬件优化1)三件套硬件配置多核高频CPU,多核可以执行多个线程;配置大内存和增加内存来增加缓存区的容量,从而减少磁盘I/O时间,从而提高响应速度;配置高速磁盘或合理分布磁盘:高速磁盘提高I/O,分布式磁盘可以提高并行操作的能力。2)优化数据库参数优化数据库参数可以提高资源利用率,从而提高MySQL服务器性能。MySQL服务的配置参数都在my.cnf或my.ini中。下面列出对性能影响较大的参数:key_buffer_size:索引缓冲区的大小;table_cache:可同时打开的表数;query_cache_size和query_cache_type:前者是Query缓冲区的大小,后者是前一个参数的开关,0表示不使用缓冲区,1表示使用缓冲区,但是在查询中可以使用SQL_NO_CACHE表示未使用缓冲区,2表示在查询中明确指定了缓冲区。使用缓冲区,即SQL_CACHE;sort_buffer_size:排序缓冲区。更多参数:https://www.mysql.com/cn/why-mysql/performance/index.html3)分库分表由于数据库压力过大,第一个问题是系统性能可能在高峰期减少,因为数据库负载过大会影响性能。还有一个,你的数据库压力太大挂了怎么办?所以这个时候你就得把系统分库分表+读写分离,也就是把一个数据库拆分成多个库,分别部署在多个数据库中。在数据库服务上,此时,它作为主数据库承载写请求。然后每个主库挂载至少一个从库,从库承载读请求。4)如果缓存集群的用户数越来越大,这时候可以继续加机器。比如在系统层面不断增加机器,就可以承载更高的并发请求。然后,如果数据库层面的写并发越来越高,扩容,增加数据库服务器。扩容机可以支持分库分表。如果数据库层面的读并发越来越高,扩容,增加从库。但是这里有个很大的问题:数据库本身并不是用来承载高并发请求的,所以一般来说,单台数据库机器每秒承载的并发量在几千量级,而数据库使用的机器都是比较高配置的,比较贵的机器,性价比非常高。如果只是简单地不断增加机器,其实是错误的。所以在高并发架构中通常会有一个缓存环节。缓存系统的设计是为了承载高并发。单机承载的并发量是几万每秒,甚至几十万每秒,高并发承载能力比数据库系统高出一到两个数量级。可以根据系统的业务特点,针对写少读多的请求引入缓存集群。具体来说,就是在写数据库的时候,同时向缓存集群写入一份数据,然后缓存集群来承载大部分的读请求。这样通过缓存集群,可以用更少的机器资源来承载更高的并发。3.结语一个完整复杂的高并发系统架构必然包括各种复杂的自研基础系统和各种精巧的架构设计,所以一篇小文章顶多能起到抛砖引玉的效果。但是总的来说,数据库优化的思路是差不多的。希望它能帮助我们。