数据库性能优化(database tuning)性能优化绝不仅仅只是索引
一毕业就接触优化方面的问题,专业做优化也有至少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)性能优化绝不仅仅只是索引的更多相关文章
- MSSQL优化(TUNING & OPTMIZATION & 优化)之——计划重用(plan reusing)
Oracle中,为了减少系统内的硬解析,从而节省系统资源,有绑定变量.计划共享(通过cursor_sharing参数)等一系列措施.那么,SQL Server作为三大商业关系库之一,是否也存在这样的机 ...
- PLSQL_性能优化系列16_Oracle Tuning Analyze优化分析
2014-12-23 Created By BaoXinjian
- MySQL 数据库性能优化之缓存参数优化
在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣 ...
- 0709MySQL 数据库性能优化之表结构优化
转自http://isky000.com/database/mysql-perfornamce-tuning-schema MySQL 数据库性能优化之缓存参数优化 MySQL数据库性能优化之硬件瓶颈 ...
- Mysql数据库(十)MySQL性能优化
一.优化概述 为了提高MySQL数据库的性能,不要进行一系列的优化措施.如果MySQL数据库需要进行大量的查询操作,那么就需要对查询语句进行优化.对于耗费时间的查询语句进行优化,可以提高整体地查询速度 ...
- 数据库性能调优——sql语句优化(转载及整理) —— 篇1
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实 ...
- 数据库性能优化之SQL语句优化
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等是体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...
- 一:MySQL数据库的性能的影响分析及其优化
MySQL数据库的性能的影响分析及其优化 MySQL数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数 ...
随机推荐
- 笔记:Maven 插件配置 - maven-jar-plugin
在项目中内部重用某个模块的测试代码很常见的需求,可能某个底层模块的测试代码中包含一些常用的测试工具类,或者一些高质量的测试基类供继承,这个时候Maven用户就需要通过配置此插件将测试类打包,插件配置代 ...
- 小白学PYTHON时最容易犯的6个错误,看看你遇到过几个
最近又在跟之前的同学一起学习python,一起进步,发现很多测试同学在初学python的时候很容易犯一些错误,特意总结了一下.其实这些错误不仅是在学python时会碰到,在学习其他语言的时候也同样会碰 ...
- Matlab绘图基础——绘制等高线图
% 等高线矩阵的获取 C = contourc(peaks(20),3); % 获取3个等级的等高线矩阵 % 等高线图形的绘制 contour(peaks(20),10);c ...
- [poj3107]Godfather_树形dp_树的重心
Godfather poj-3107 题目大意:求树的重心裸题. 注释:n<=50000. 想法:我们尝试用树形dp求树的重心,关于树的重心的定义在题目中给的很明确.关于这道题,我们邻接矩阵存不 ...
- lua continue实现
--第一种 , do while true do == then break end -- 这里有一大堆代码 -- -- break end end --第二种 i = ) do if () then ...
- Leetcode 24——Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...
- Beta Scrum Day 3
听说
- Beta阶段敏捷冲刺报告-DAY5
Beta阶段敏捷冲刺报告-DAY5 Scrum Meeting 敏捷开发日期 2017.11.6 会议时间 12:00 会议地点 软工所 参会人员 全体成员 会议内容 乱序问题的解决,异常输入提示 讨 ...
- Django 模版语法
一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. {% extends "base ...
- PHP trait
ps:由于PHP是单继承的,无法继承多个类所以可以用triat(关键字,特性)来命名达到子类继承多个父类的效果:暂且理解为类吧.class = trait <?php trait A { pub ...