一毕业就接触优化方面的问题,专业做优化也有至少5年之多的时间了,可现在还是经常听到很多人认为优化很简单,就是建索引的问题,这确实不能怪大家,做这行20多年的时间里,在职业生涯的每个阶段,几乎都能听到这样的声音,在很多书上也看到过这样的说法,但这里我想告诉大家:优化绝不只是建索引,优化也不是很简单的事儿,这项工作需要全面的数据库基础知识,深刻的概念理解,还要有丰富的实践经验。

数据库的优化,大体可以分为OS、DB和SQL层面的优化。先抛开OS和DB层面不说,我们就先说SQL语句的优化(SQL TUNING),说到SQL的优化,就让我们不得不提到执行计划(explain plan),所有的关系型数据库(oracle,db2,sqlserver,mysql,postgresql,gp等),针对SQL语句,都有相应的执行计划,只是表现形式不同而已。执行计划里包括了多个节点或步骤,根据SQL复杂度的不同,节点或多或少,这些节点里,有多种数据的访问方法,也有多种节点之间数据的计算方法,而索引,只是多种数据访问方法里的一种而已,再抛开那些计算节点和其他数据访问节点,仅仅索引访问数据的方法,又分为很多种,大家可以看看,抛开了这么多方面和内容,仅仅索引还有这么多内容学习和研究。

说到了访问数据的方法,最常见的就是全表扫描和索引访问了,现在很多人,甚至很多IT人一见到全表扫描就认为执行计划出现了问题,甚至大声惊呼,好像发现了新大陆,其实,全表扫描有自己的适用场景,而索引访问也有自己的适用场景,并不是任何时候通过索引访问数据才是最优的,最浅显的,访问表里的大部分数据,全表扫描就可能比索引访问要好些,还有一点,就是索引的cluster factor,当这个值很高的时候(也许很多朋友注意到,有时一个SQL的逻辑读比整张表都大很多,仅此而已),即使你访问的数据比例不大,也可能走全表扫描,而在多个不同字段上建的索引存在的情况下,cluster factor的问题几乎是不可避免的,所以,要想真正的掌握优化,我们必须知道并深入理解数据库涉及的基础知识和概念,只有这样,我们才能搞清楚,什么情况下,什么样的访问方法和算法是最合适的。

SQL TUNING确实对职业人员的要求较高,但这只是解决了应用层面的问题,不可否认,在很多情况下,系统性能甚至故障是由SQL导致的,但在很多情况下,即使把SQL TUNING的再好,也是解决不了性能问题,这就要求我们对OS和DB层面进行整体分析和调优。

这篇文章到此为止,只是告诉大家,调优不仅仅是索引问题,还有很多方面需要我们去学习和研究,至于OS、DB和SQL TUNING调优的具体方法和步骤,请查阅本博客其他文章。

数据库性能优化(database tuning)性能优化绝不仅仅只是索引的更多相关文章

  1. MSSQL优化(TUNING & OPTMIZATION & 优化)之——计划重用(plan reusing)

    Oracle中,为了减少系统内的硬解析,从而节省系统资源,有绑定变量.计划共享(通过cursor_sharing参数)等一系列措施.那么,SQL Server作为三大商业关系库之一,是否也存在这样的机 ...

  2. PLSQL_性能优化系列16_Oracle Tuning Analyze优化分析

    2014-12-23 Created By BaoXinjian

  3. MySQL 数据库性能优化之缓存参数优化

    在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣 ...

  4. 0709MySQL 数据库性能优化之表结构优化

    转自http://isky000.com/database/mysql-perfornamce-tuning-schema MySQL 数据库性能优化之缓存参数优化 MySQL数据库性能优化之硬件瓶颈 ...

  5. Mysql数据库(十)MySQL性能优化

    一.优化概述 为了提高MySQL数据库的性能,不要进行一系列的优化措施.如果MySQL数据库需要进行大量的查询操作,那么就需要对查询语句进行优化.对于耗费时间的查询语句进行优化,可以提高整体地查询速度 ...

  6. 数据库性能调优——sql语句优化(转载及整理) —— 篇1

    一.问题的提出                    在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实 ...

  7. 数据库性能优化之SQL语句优化

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等是体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...

  8. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

    SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...

  9. 一:MySQL数据库的性能的影响分析及其优化

    MySQL数据库的性能的影响分析及其优化 MySQL数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数 ...

随机推荐

  1. 【Django】 视图层说明

    [Django视图层] 视图层的主要工作是衔接HTTP请求,Python程序和HTML模板,使他们能够有机互相合作从模型层lou到数据并且反馈.说到视图层的工作就有以下几个方面要说 ■ URL映射 对 ...

  2. Java多线程:乐观锁、悲观锁、自旋锁

    悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据 ...

  3. 分布式代码管理系统GIT

    1.1Git安装 CentOS上   yum install -y epel-release; yum install git Ubuntu上    apt-get install git Windo ...

  4. 程序猿媛 九:Adroid zxing 二维码3.1集成(源码无删减)

    Adroid zxing 二维码3.1集成 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段. 转载请保留原文出处“http://my.oschina.net/gluoyer/blog”, ...

  5. curl的使用基本流程,HTTP的get请求,post请求

    使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤: 1.初始化连接句柄: 2.设置CURL选项: 3.执行并获取结果: 4.释放VURL连接句柄. 下面的程序片段是使用CURL发送 ...

  6. SSH三大框架的整合

    SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 1.4 Hibernate ...

  7. Java基础学习笔记二十三 Java核心语法之反射

    类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...

  8. 【R语言系列】R语言初识及安装

    一.R是什么 R语言是由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两个人共同发明. 其词法和语法分别源自Schema和S语言. R定义:一个能够自由幼小的用于统计计算和绘 ...

  9. java.lang.system 类源码解读

    通过每块代码进行源码解读,并发现源码使用的技术栈,扩展视野. registerNatives 方法解读 /* register the natives via the static initializ ...

  10. beta冲刺1

    前言:这篇算是开始补之前的开端,毕竟beta阶段我们从前面开始就有在陆续做了. 今天的工作: 接收了新成员*1,然后几个人聚了一下,并且讨论了一下目前遇到的问题,以及目前需要处理的问题. 目前遇到的问 ...