一毕业就接触优化方面的问题,专业做优化也有至少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. Docker + webpack 打包前端项目

    码云代码地址: https://gitee.com/caonimashi/docker_deployment_front_end    构建基础镜像: 1.下载一个 Apline Linux 操作系统 ...

  2. Python -- Records项目学习

    Records学习笔记 Records链接地址 1. __getitem__(self, key) 内建方法(Build-in) 例子: class Test(object): def __getit ...

  3. 安装php扩展 ffmpeg-php

    环境: CentOS 6.5 PHP5.6 安装前php 已加载GD 模块(yum install php-gd)1.添加ffmpeg和ffmpeg-devel源 cat > /etc/yum. ...

  4. php中require、require_once、include、include_once类库重复引入效率问题详解

    首先我详细说下这四个引入函数 include() 与require() 的功能相同 唯一不同:require()不管是否被执行,只要存在,php在执行前都会预引入,include()则是执行到该语句时 ...

  5. JavaWeb学习笔记三 Servlet

    Servlet 是运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API,动态的向客户 ...

  6. JAVA入门——Generic/泛型

    在台科大的第二次JAVA作业,老师课上讲的内容是泛型. 泛型(generic),泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以 ...

  7. JavaScript(第十八天)【DOM基础】

    学习要点: 1.DOM介绍 2.查找元素 3.DOM节点 4.节点操作 DOM(Document Object Model)即文档对象模型,针对HTML和XML文档的API(应用程序接口).DOM描绘 ...

  8. 软工实践项目需求分析(团队)修改版get√-黄紫仪

    日常前言:随笔距离文档大体完成已经过去了2天+(因为中间插了一波结对作业),所以目测感受没有那时候清晰(那时候烦的想打人了都--)需求分析那边去百度找了模板.emmmm好多东西感觉听都没听说过QAQ, ...

  9. Week1绪论--抽象数据类型

    一.作业题目 1.构造有理数T,元素e1,e2分别被赋以分子.分母值 2.销毁有理数T 3.用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母. 4.将有理数T的 ...

  10. 乘法表(24.9.2017) (WARNING!!!!!!!!!!!)

    #include "stdio.h" main() { int i,j,result; printf("\n"); ;i<;i++) { ;j<;j ...