mysql性能优化培训

mysql性能优化培训

ID:34072075

大小:192.89 KB

页数:18页

时间:2019-03-03

mysql性能优化培训_第1页
mysql性能优化培训_第2页
mysql性能优化培训_第3页
mysql性能优化培训_第4页
mysql性能优化培训_第5页
资源描述:

《mysql性能优化培训》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、一概述数据库属于IO密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是IO,尽可能将磁盘IO转化为内存IO。所以我们先从MySQL数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化二表结构优化:由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作IO的时候是以page(block)的方式,也就是说,如果我们每条记录所占用的空间量

2、减小,就会使每个page中可存放的数据行数增大,那么每次IO可访问的行数也就增多了。反过来说,处理相同行数的数据,需要访问的page就会减少,也就是IO操作次数降低,直接提升性能。此外,由于我们的内存是有限的,增加每个page中存放的数据行数,就等于增加每个内存块的缓存数据量,同时还会提升内存换中数据命中的几率,也就是缓存命中率。优化原则:使数据量最小,性能的瓶颈在于磁盘性能,数据量越小,磁盘读取数据的速度就越快,同时,在较小的列上建立索引,索引文件占用的资源也会更少。1.尽可能地使用最有效(最小)的数据类型。MySQL

3、有很多节省磁盘空间和内存的专业化类型。尽可能使用较小的整数类型使表更小。例如,MEDIUMINT经常比INT好一些,因为MEDIUMINT列使用的空间要少25%2.尽量使用NOTNULLNULL类型比较特殊,SQL难优化。虽然MySQLNULL类型和Oracle的NULL有差异,会进入索引中,但如果是一个组合索引,那么这个NULL类型的字段会极大影响整个索引的效率。此外,NULL在索引中的处理也是特殊的,也会占用额外的存放空间。很多人觉得NULL会节省一些空间,所以尽量让NULL来达到节省IO的目的,但是大部分时候这会适

4、得其反,虽然空间上可能确实有一定节省,倒是带来了很多其他的优化问题,不但没有将IO量省下来,反而加大了SQL的IO量。所以尽量确保DEFAULT值不是NULL,也是一个很好的表结构设计优化习惯。3.只创建你确实需要的索引。索引对检索有好处,但是当你需要快速存储东西时就变得糟糕。如果主要通过搜索列的组合来存取一个表,对它们做一个索引。第一个索引部分应该是最常用的列。如果从表中选择时总是使用许多列,应该首先以更多的副本使用列以获得更好的索引压缩。1.垂直拆分保证经常查询、显示的主要字段在一张表中,其他的信息放在明细表中。此类

5、优化更利于常用字段频繁查询时,提高系统性能。例如教师信息表,经常用到的字段非常有限,每次查询浪费大量的内存资源加载不使用的信息,对性能造成一定影响。2.水平拆分当表中数据量非常大时,可以根据具体的业务情况,按照某个字段进行分类,存储在不同的表甚至是数据库中,使得某个表或库的数据量在一个比较小的范围内,一次来提高查询性能。一索引的使用1.索引对单个表查询的影响索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列

6、有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000行,这比顺序读取至少快100倍。注意你需要存取几乎所有1000行,它较快的顺序读取,因为此时我们避免磁盘寻道。例如对下面这样的一个student表:mysql>SELECT*FROMstudentIdNameEnglishChineseHistory12Tom66936756Paul78527510Marry5489744Tina99834839William43965274Stone42406186Smith498

7、57837Black49634789White943152这样,我们试图对它进行一个特定查询时,就不得不做一个全表的扫描,速度很慢。例如,我们查找出所有english成绩不及格的学生:mysql>SELECTname,englishFROMstudentWHEREenglish<60;NameEnglishMarry54William43Stone42Smith49Black49 其中,WHERE从句不得不匹配每个记录,以检查是否符合条件。对于这个较小的表也许感觉不到太多的影响。但是对于一个较大的表,例如一个非常大的学校

8、,我们可能需要存储成千上万的记录,这样一个检索的所花的时间是十分可观的。如果,我们为english列创建一个索引,此索引存储在索引文件中,包含表中每行的english列值,但此索引是在english的基础上排序的。现在,不需要逐行搜索全表查找匹配的条款,而是可以利用索引进行查找。假如我们要查找分数小于60的所有行,那

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。