一毕业就接触优化方面的问题,专业做优化也有至少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. 笔记:Spring Cloud Eureka 服务发现与消费

    服务发现与消费,其服务发现的任务是由Eureka的客户端完成,而服务的消费任务由Ribbon.JerseyClient等完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器:使用Jersey ...

  2. Algorithm --> 爬楼梯求最大分数

    爬楼梯求最大分数 如下图,最大分数是: 10+20+25+20=75.        要求: 1.每次只能走一步或者两步: 2.不能连续三步走一样的,即最多连续走两次一步,或者连续走两次两步: 3.必 ...

  3. android:baselineAligned属性

    对于可以显示文字的View(如TextView,Button等),它的baseline 指的是这个UI控件中文字Text的baseline 到UI控件顶端的偏移值,可以通过View 的getBasel ...

  4. ConcurrentHashMap 源码分析

    ConcurrentHashMap 源码分析 1. 前言    终于到这个类了,其实在前面很过很多次这个类,因为这个类代码量比较大,并且涉及到并发的问题,还有一点就是这个代码有些真的晦涩,不好懂.前前 ...

  5. 火狐浏览器中如何删除保存的cookie

    大致分为三步即可: 打开浏览器并查看图示,按照图示操作即可完成:

  6. 爬取博主所有文章并保存到本地(.txt版)--python3.6

    闲话: 一位前辈告诉我大学期间要好好维护自己的博客,在博客园发布很好,但是自己最好也保留一个备份. 正好最近在学习python,刚刚从py2转到py3,还有点不是很习惯,正想着多练习,于是萌生了这个想 ...

  7. JavaScript 哈希表(散列表)应用

    查找的效率与比较次数密切相关.基于比较的程序,运算效率是比较低的.比如平时可以通过indexOf查找一个数据.但这是一个基于比较的一个实现.如果是淘宝那样有上亿个商品,那么用indeOf 来查数据就会 ...

  8. Vim配置及使用技巧

    要说Linux下比较好用的文本编辑器,我推荐vim(当然很多人都用emacs,可我没用过),用vim也有一年左右,有些心得体会想与诸位分享.在我的学习过程中,借鉴了不少优秀的博客,其中有csdn大神n ...

  9. Linux下ftp和ssh详解

    学习了几天Linux下ftp和ssh的搭建和使用,故记录一下.学习ftp和ssh的主要目的是为了连接远程主机,并且进行文件传输.废话不多说,直接开讲! ftp服务器 1. 环境搭建 本人的系统是Arc ...

  10. Archlinux无线联网教程

    本人是学生党,故对于有线方式不甚了解,学校里一般使用mentohust用动态IP方式联网,或者直接连接wifi,这里介绍无线联网的一些方式,主要包括公共wifi和带有WEP或者WPA或者WPA2PSK ...