`
hnylj
  • 浏览: 209769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL数据库优化的一些个人思考

阅读更多


题外话:一个系统上线后,运行性能瓶颈的原因是多方面的,要进行系统的优化也是一项复杂的工作,因为你不得不了解整个系统的方方面面,例如你的硬件资源,你的网络情况等。作为开发人员,主要负责应用程序的开发,作为运维人员,主要负责应用程序的部署和监控,有时候可能应用程序没有问题,但部署到线上之后,出现数据库连接超时,发送请求Scoket错误等各种奇奇怪怪的问题,这就需要双方一个良好的沟通,同时双方尽力实现各自的优化工作。

 

实践表明,作为开发人员,对数据库的优化应该有一定的认识,因为它作为信息支撑的基础与核心,往往是系统瓶颈的一个重要方面。

 

数据库也是一个系统,它本身有一些配置参数,这些配置参数在不同的应用环境中应该有不同的配置,即不同的配置会带来不同的性能,对于MySQL数据库服务器来说,非常重要的参数配置位于安装目录下的my.ini文件中,其中两个最重要的参数变量是key_buffer_size和table_cache,这两个值的配置需要根据你机器的硬件资源和数据库表的情况以及你要进行的数据库操作来做决定,另外这个配置文件中还有许多其他的配置,这个都需要根据实际情况来做决定。

 

有时候造成系统瓶颈的也许与你的硬件资源有关,例如磁盘的传输性能,CPU的处理能力,内存的大小等。当然作为生产环境的服务器,拿目前的服务器配置来说,相信这些都已经不是问题了,但我们要知道它是引起性能瓶颈的一个因素。

 

你使用的操作系统对MySQL发挥最好的性能也有很重要的影响,一般在互联网应用中,我们常采用的Linux系统,但要注意最好用Linux内核是2.4版本之后的版本,因为之前的linux版本支持的文件大小最大值为2G,如果数据库文件大于2G,就有问题了。

 

MySQL服务器自己有一个查询优化器,它的职责就是搜索一个最佳的SQL查询方案,一般的单表并且数据字段也比较少的查询引起的查询方案往往比较少,但复杂的sql查询则会引起多种查询方案,MySQL查询优化器就需要从多个方案中评估最优的方案,这需要花费一定的时间,一般地,优化器搜索的方案越少,它编译一个查询所花费的时间越少。但另一方面,因为优化器跳过了一些方案,它可能错过一个最佳方案,所以有时也需要根据情况来合理地折中。这种关于MySQL优化器的工作,对于开发人员来说,我觉得暂时可以不必深入了解,而且随着MySQL服务器的不断升级和改进,它的优化会越来越好。

 

其实对于广大开发人员来说,直接接触的是对SQL语句的优化,对于SQL的优化,关心最多的是查询的优化,其基本原则是:优化数据的访问。查询性能低下的基本原因是访问了太多的数据,常常可以通过减少数据访问的方式来提高性能,虽然有时不可避免要查询很大的数据,但这种情况在实际的应用程序中并不常见,因此:
1、确定你的应用程序是否访问了超过需要的列,例如你select * from tblName,不需要的列不要查询(没人不知道,但我看到程序中却有这么写的)。
2、确定你是否访问了不需要的数据,如果你先向服务器请求不需要的数据,然后再在应用程序中丢弃,这会造成服务器额外的负担,增加了网络开销和CPU内存资源,当应用程序和数据库服务器不在同一台主机上时,网络开销会更加大(没人不知道,但我看到程序中却有这么写的)。

 

当你获取的是自己需要的行数和列数,这时就要开始考虑你的查询是否检查了过多的数据行,衡量查询的非常简单的指标就是:
1.执行的时间;
2.检查的行数;


执行的时间:往往是因为你检查了太多的行数引起的,但也很可能与你的硬件环境等有一定的关系,我们不必过分强调这一个,但你一定要注意那些非常影响执行时间的因素。

 

检查的行数:理想的情况是返回的行和检查的行一样多,但在实际应用中几乎不可能,例如很多多表连接查询,不可能返回的行和检查的行一样多。通常情况下,检查的行和返回的行的比率:1:1 到 10:1之间是很正常的。

 

我们的每个查询都有几种访问方式来返回需要的数据行,
1.全表扫描
2.索引扫描
3.范围扫描
4.唯一索引扫描
5.常量扫描
这几种数据访问方式的访问速度依次递增。

在MySQL中写SQL语句时,请经常使用EXPLAIN语句来分析查询情况,特别是操作比较频繁的查询语句,非常建议使用EXPLAIN语句来分析一下。
例如: EXPLAIN  SELECT  *  FROM  USER;
执行这样的语句之后,MySQL服务器会返回一个详尽的执行描述,根据描述,我们可以知道这条语句的执行效率,例如如果得到的访问类型type:all,这表示全表扫描,那你就最好添加一个索引来避免全表扫描。有时候你添加了索引之后还得不到一个好的访问类型,你就要考虑是不是数据库表设计得不太合理了。

 

有时候优化可能需要你重构你的查询语句,将你的复杂查询拆分成几个简单的查询语句,按照传统的观念,大家都是尽可能少的去数据库查询,但目前的网络通信情况明显比以前好很多,而且真正的应用程序和数据库服务器一般都是部署在内网专用通道上,网络连接已经不是什么问题了,所以别害怕多个查询,MySQL对简单的查询响应非常好。但你也要知道,连接数据库服务器比执行查询要慢很多,所以你要根据情况来作出合理的折中,看是否必要拆分复杂查询。

 

网络上有很多关于SQL语句的优化原则,我发现有些优化方式对Oracle适用,但对MySQL也许并不适用,这可能是由于MySQL优化器优化规则的不同而引起的。

 

开发人员要了解更多的SQL优化知识,数据库DBA或运维人员要了解更多的数据库服务器优化的知识,这样两力合二为一才是开发出一个高性能的应用系统的基础和保障。

 

而这一切都是在不断实践中成长。

 

 一个Java技术交流群,一起交流,共同进步,扣扣群号:513086638

 

 

 

0
0
分享到:
评论

相关推荐

    解析MySQL数据库性能优化的六大技巧

    因此,本文将介绍对MySQL进行性能优化的技巧和窍门。1.存储引擎的选择如果数据表需要事务处理,应该考虑使用InnoDB,因为它完全符合ACID特性。如果不需要事务处理,使用默认存储引擎MyISAM是比较明智的。并且不要...

    Mysql千万级别数据优化方案

    Mysql千万级别数据优化方案

    MYSQL中binlog优化的一些思考汇总

    事务提交时,只需要保证事务的redo log落盘即可,通过redo log的顺序写代替页面的随机写提升数据库系统的性能。但是,该方案必须要求每个事务提交时都将其生成的redo log进行一次刷盘,效率不高。 问题2:binlog和...

    MYSQL培训经典教程(共两部分) 1/2

    数据库优化 177 8.1 索引的使用 178 8.1.1索引对单个表查询的影响 178 8.1.2索引对多个表查询的影响 180 8.1.3多列索引对查询的影响 181 8.1.4索引的作用 182 8.1.5 索引的弊端 182 8.1.6 选择...

    2013中国数据库大会ppt(1)

    主流开源NoSQL及分布式存储的应用与思考.pdf 腾讯在线交易平台统一数据层高一致性解决方案.pdf NoSQL一致性实践:我对CAP的一点认识.pdf MongoDB at Qihoo 360.pdf MySQL Cluster实战初探 .pdf SAP HANA深度剖析.pdf...

    2013年中国数据库大会-09-主流开源NoSQL及分布式存储的应用与思考

    一直以来,数据库架构实践、数据库优化应用等,是备受大家关注的传统话题,本届大会仍将继续邀请一批国内顶尖的技术专家来进行分享,包括Oracle应用实践、MySQL应用实践、SQL Server应用实践等。

    [高性能MySQL(第3版)].Baron.Scbwartz等.扫描版

    全书共分为16章和6 个附录,内容涵盖MySQL架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可用与高可扩展性,以及云端的MySQL和MySQL相关工具等方面的内容。每一章都是相对独立的主题...

    2013年中国数据库大会PPT第一部分

    9.主流开源NoSQL及分布式存储的应用与思考.pdf 10.腾讯在线交易平台统一数据层高一致性解决方案.pdf 11.NoSQL一致性实践:我对CAP的一点认识.pdf 12.MongoDB at Qihoo 360.pdf 13.MySQL Cluster实战初探 .pdf 14.SAP...

    2013中国数据库大会ppt(3)

    主流开源NoSQL及分布式存储的应用与思考.pdf 腾讯在线交易平台统一数据层高一致性解决方案.pdf NoSQL一致性实践:我对CAP的一点认识.pdf MongoDB at Qihoo 360.pdf MySQL Cluster实战初探 .pdf SAP HANA深度剖析.pdf...

    完结11章-技术大牛成长课,从0到1带你手写一个数据库系统

    手把手实现每一行代码,掌握每行代码的原理,实现代码规模巨大的数据库系统原型,开发、debug过程演示真实传授解bug的核心方法论,探讨各种工程技巧、可优化的空间,引发深层思考 下面就开始我们的源码项目:

    数据库设计之PowerDesigner工具

    如果出现循环关系,那表示一定有问题(需要优化的问题) 3、站在任何一个对象的上帝角度思考此对象的关联对象。 4、循环2、3步,直到数据库设计完成 逻辑建模:没有确定是哪一个数据库 物理建模:根据具体的数据库...

    最新云平台和数据库平台迁移方案合集(21份).zip

    PostgreSQL去O迁移的一些思考 Service+Mesh渐进式迁移方案 从+IDC+到云端服务迁移历程 大规模集群跨城迁移之术 ‍行业应用迁移到云原生环境的挑战、路径与实践 混合云时代,如何化解灾备与迁移困境 基于云原生的...

    MYSQL培训经典教程(共两部分) 2/2

    数据库优化 177 8.1 索引的使用 178 8.1.1索引对单个表查询的影响 178 8.1.2索引对多个表查询的影响 180 8.1.3多列索引对查询的影响 181 8.1.4索引的作用 182 8.1.5 索引的弊端 182 8.1.6 选择...

    MySql 快速插入千万级大数据的方法示例

    在数据分析领域,数据库是我们的好帮手。不仅可以接受我们的查询时间,还可以...这也促使我思考怎样优化数据库插入及查询操作,提高效率。 在不断优化过程中,性能有大幅提升。在按时间序列从数据库查询并汇总生成2万60

    牛客网数据库SQL实战题目汇总.zip

    只支持sqlite,不支持mysql,oracle等其他SQL语言。 再讲一讲自己的刷题体会: 比较坑也是一件好事,可以训练思维的全面性,努力去寻找问题的不同切入点。 不要做完了就直接下一题!我个人最喜欢看评论,因为可以...

    builddatabase:从头开始构建分布式SQL数据库

    [思考:如何支持json /协议缓冲区] 第四章MySQL协议支持 [协议概述] [如何用wireshark来辅助调试] [要求格式] [回应格式] [准备语句支持] [TiDB代码分析] 第五章执行计划优化 [基于规则的优化] [基于支出分析...

    2013中国数据大会ppt(2)

    主流开源NoSQL及分布式存储的应用与思考.pdf 腾讯在线交易平台统一数据层高一致性解决方案.pdf NoSQL一致性实践:我对CAP的一点认识.pdf MongoDB at Qihoo 360.pdf MySQL Cluster实战初探 .pdf SAP HANA深度剖析.pdf...

    一条SQL语句是如何执行的?

    我们都知道SQL是声明式语言,作为一名程序媛使用SQL的频繁非常高,那你知道一条SQL是如何被执行的吗,今天我们就从数据库的角度来思考一下SQL是如何被执行的。 MySQL中的SQL是如何执行的 MySQL是典型的C/S架构,即...

    MySQL性能分析神器,你还不知道它?那你就out了

    数据库服务器的优化步骤 当我们遇到数据库调优的问题,该如何思考呢?下面分享一张思考的流程图: 将整个流程划分成观察(Show status)和行动(Action)两个部分。其中字母S的部分代表观察(会使用相应的分析工具)...

    Mysql解决USE DB堵塞详解

    MYSQL 5.6.16 RR隔离级别 GITD关闭 表现如下: use db不能进入数据库 show table status不能查询到表信息 schema.processlist来看有大量的 Waiting for table metadata lock 情急之下他杀掉了一大堆线程后发现还是不...

Global site tag (gtag.js) - Google Analytics