数据库性能优化(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数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数 ...
随机推荐
- Java中删除第一个集合中以某某开头的元素,删除第二个集合中以某某结尾的元素,并合并成一个集合
import java.util.ArrayList; import java.util.List; public class Test { public static void main(Strin ...
- 读headFirst设计模式 - 观察者模式
上次学习了策略模式,这次来学习观察者模式.这次先把书上的例子学习一下,然后再自己写一个例子,看是否能做到举一反三(或者说触类旁通),不过要想真正的掌握还要多多思考和练习. 学习书上的例子 现在我们有一 ...
- Java多线程:CopyOnWrite容器
一.什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然 ...
- 文献管理工具的使用(Mendeley和Endnote)
以前是Mendeley的忠诚用户,但是最近在linux平台下出现的bug使我非常崩溃,之前辛辛苦苦整理的文献和分组,分分钟灰飞烟灭.所以希望能转用一个至少比较稳定的文献管理软件.刚好手头上有Mac版的 ...
- [日常] NOIWC 2018爆零记
开个坑慢慢更(逃 (然而没准会坑掉?) day 0 大概 $8:30$ 就滚去雅礼了qwq 过去的时候发现并没有人...进报到处楼门的时候还被强行拍照围观了一波OwO 然后就领了HZ所有人的提包和狗牌 ...
- C语言函数嵌套调用作业总结
成绩管理系统作业小结 devc中出现"ID Return"问题,我帮很多同学看完后发现,大部分还是自身程序问题,如全局变量大小写错误.没有添加c文件进工程等等.所以对于" ...
- 2017C语言程序设计预备作业
Deadline:2017-9-30 23:00 一.学习使用MarkDown 本学期的博客随笔都将使用MarkDown格式,要求熟练掌握MarkDown语法,学会如何使用标题,插入超链接,列表,插入 ...
- 项目Alpha冲刺Day10
一.会议照片 二.项目进展 1.今日安排 解决前后台联调问题,完善全局的请求和路由跳转处理,添加空文件完善路由信息,优化界面跳转等待.完成个人信息和修改密码.修改前台数据组织和方法调用方式.解决登录和 ...
- 201621123035 《Java程序设计》第1周学习总结
1.本周学习总结 本周学习内容:Java平台概论.认识JDK规范与操作.了解JVM.JRE与JDK.撰写Java原始码.path是什么 关键词:JVM.JRE.JDK 联系:JVM是Java虚拟机的缩 ...
- 【iOS】swift init构造器
这几天在使用 Swift 重写原来的一个运动社交应用 SportJoin. 为什么要重写呢? 首先因为实在找不到设计师给我作图; 其次, 我也闲不下来, 想找一些项目做, 所以只好将原来的代码重写了. ...