问答

影响MySQL数据库性能的是什么?该如何提高SQL的执行效率?

2019-05-09 meiz21

问题答疑

许多平台的SQL开发人员都很苦恼,有关调优数据库的一些问题,一次次的犯错误,一次次的去补救,却依旧还是不能很好的把握好其中的规则和变化,提升数据库的性能,成为越来越重要的操作,如果能列举出一个简便的可操作清单会事半功倍!
SQL数据库
通常,很多的开发人员如果找到了适用自己的办法,就不会再想着去研究其他的办法,更不知道自己什么时候就已犯错,盲目只看数据测试的数据,换作别的系统却无法运作,所以很多时候就需要他们在编写代码时考虑到生产级环境的问题,如果他们在开发初期不这么做,数据库管理员后期会让他们返工,遭殃的就是用户,对于如何调优数据库需要开发人员耐心去捕捉,因为并没有全面适用的硬性规则。
影响SQL数据库性能的几个方面
1.服务器硬件。
2.服务器系统(系统参数优化)。
3.存储引擎。 MyISAM: 不支持事务,表级锁。 InnoDB: 支持事务,支持行级锁,事务 ACID。
4.数据库参数配置。
5.数据库结构设计和SQL语句。(重点优化)
 
如何提高SQL的执行效率
1. 不要用 UPDATE 代替 CASE,
这是很多开发人员最容易忽视的一个问题,因为已经习惯使用UPDATE,而导致会出现UPDATE 语句记入日志,出现每次写入表中要执行两次的问题,所以要想避免这个问题,就要使用内联 CASE 语句,这样处理性能提升幅度很惊人。
2. 选择最有效率的表名顺序
ORACLE 的解析器处理FROM子句中的表名是按照从右到左的顺序处理的,而写在最后的就会第一个被处理,而如果其中包括多个表,就选择记录条数最少的作为基础表。
3.SELECT子句中避免使用“ * ”
如果你在句子中频繁使用“ * ”,会导致ORACLE在解析的过程中,也需要不断的查询数据字典,这样就会耗费很多的时间,大大的降低了执行效率。
4.不要盲目地重用代码
为了节省时间和精力,在开发过程中都会拷贝很多别人编写的代码,来获取自己想要的数据,但这其中不能避免的会有很多不需要的数据,大量的堆积会展示为 WHERE子句中的一个额外的外连接或额外条件,但如果开发人员能根据自己的需求而仔细的精简重复的代码,就能大幅提升性能。
5.预暂存数据
通过提前连接表,可以把一个报表或要对大表执行的连接操作,持久性的存储到一个表中来预暂存数据,这样就可以避免大连接,非常的节省服务器资源。但针对开发人员来说,只需要将注意力集中在查询本身上,根据连接创建只读视图,那样就不必一次又一次键入连接条件。
6.批量删除和更新
工作当中出现的不小心操作,删除或是更新了很多大表中的数据就非常糟糕了,而且他们都是作为单一事务来运行的,如果是要制止这样的错误行为,就必须返回(roll back)整个事务,花费的时间会多上几倍。
7.利用缓存
一般情况下,80%的数据库查询是读取,其余20%是写入,所以应用程序读取时很慢,而适当的缓存更便于直接提供服务,但需要注意不要让缓存为陈旧数据提供服务或需要重新编码使用,所以可以将缓存与数据库负载均衡软件结合使用,不需要进行任何程序的修改,就可确保应用程序的运行效率与数据库服务器的效率一样高。
7.当它有意义的时候再扩展
不断的消耗和运行,每个企业都会有一个饱和点,这时候的内存也消耗殆尽了,而且再没有升级的空间,所以无法从数据库中获取更多优势,解决办法只能是扩展基础设施架构。
SQL层上的数据库减轻了数据库的负载,并且实现了无缝且高效的转换,不但较大限度的提高了资产利用率,还大大节省了成本,而对于数据库的优化,着重是提高MySQL数据库的整体性能,合理的结构设计和参数调整,可以提高用户的相应速度,以便让系统提供更大的负荷。


QQ在线咨询