MySQL手册版本 5.0.20-MySQL优化(一)

2016-01-29 14:56 5 1 收藏

MySQL手册版本 5.0.20-MySQL优化(一),MySQL手册版本 5.0.20-MySQL优化(一)

【 tulaoshi.com - MySQL 】

7 MySQL 优化

数据库优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解才行。尽管对系统或应用系统的了解不多的情况下优化效果还不错,但是如果想优化的效果更好,那么就需要对它了解更多才行。

本章主要讲解了几种优化MySQL的方法,并且给出了例子。记着,总有各种办法能让系统运行的更快,当然了,这需要更多的努力。

7.1 优化概述

让系统运行得快得最重要因素是数据库基本的设计。并且还必须清楚您的系统要用来做什么,以及存在的瓶颈。

最常见的系统瓶颈有以下几种:

磁盘搜索。它慢慢地在磁盘中搜索数据块。对现代磁盘来说,平时的搜索时间基本上小于10毫秒,因此理论上每秒钟可以做100次磁盘搜索。这个时间对于全新的新磁盘来说提高的不多,并且对于只有一个表的情况也是如此。加快搜索时间的方法是将数据分开存放到多个磁盘中。

磁盘读/写。当磁盘在正确的位置上时,就需要读取数据。对现代磁盘来说,磁盘吞吐量至少是10-20MB/秒。这比磁盘搜索的优化更容易,因为可以从多个媒介中并行地读取数据。

CPU周期。数据存储在主内存中(或者它已经在主内存中了),这就需要处理这些数据以得到想要的结果。存在多个?硐啾饶诖嫒萘坷此蹈窍拗频囊蛩亍2还孕"砝此担俣韧ǔ2皇俏侍狻?

内存带宽。当CPU要将更多的数据存放在CPU缓存中时,主内存的带宽就是瓶颈了。在大多数系统中,这不是常见的瓶颈,不过也是要注意的一个因素。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/mysql/)

7.1.1 MySQL 设计的局限性

当使用MyISAM存储引擎时,MySQL会使用一个快速数据表锁以允许同时多个读取和一个写入。这种存储引擎的最大问题是发生在一个单一的表上同时做稳定的更新操作及慢速查询。如果这种情况在某个表中存在,可以使用另一种表类型。详情请看"15 MySQL Storage Engines and Table Types"。

MySQL可以同时在事务及非事务表下工作。为了能够平滑的使用非事务表(发生错误时不能回滚),有以下几条规则:

所有的字段都有默认值

如果字段中插入了一个"错误"的值,比如在数字类型字段中插入过大数值,那么MySQL会将该字段值置为"最可能的值"而不是给出一个错误。数字类型的值是0,最小或者最大的可能值。字符串类型,不是空字符串就是字段所能存储的最大长度。

所有的计算表达式都会返回一个值而报告条件错误,例如 1/0 返回 NULL。

这些规则隐含的意思是,不能使用MySQL来检查字段内容。相反地,必须在存储到数据库前在应用程序中来检查。详情请看"1.8.6 How MySQL Deals with Constraints 和 "14.1.4 INSERT Syntax"。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/mysql/)

7.1.2 应用设计的可移植性

由于各种不同的数据库实现了各自的SQL标准,这就需要我们尽量使用可移植的SQL应用。查询和插入操作很容易就能做到可移植,不过由于更多的约束条件的要求就越发困难。想要让一个应用在各种数据库系统上快速运行,就变得更困难了。

为了能让一个复杂的应用做到可移植,就要先看这个应用运行于哪种数据库系统之上,然后看这些数据库系统都支持哪些特性。

每个数据库系统都有某些不足。也就是说,由于设计上的一些妥协,导致了性能上的差异。

可以用MySQL的 crash-me 程序来看选定的数据库服务器上可以使用的函数,类型,限制等。crash-me 不会检查各种可能存在的特性,不过这仍然是合乎情理的理解,大约做了450次测试。

一个 crash-me 的信息类型的例子就是,它会告诉您如果想使用Informix 或 DB2的话,就不能使字段

来源:http://www.tulaoshi.com/n/20160129/1494783.html

延伸阅读
标签: PHP
通常地,应该保存所有的冗余数据(在数据库原理中叫做"第三范式")。然而,为了能取得更高的效率复制一些信息或者创建摘要表也是划算的。 存储过程或者 UDFs(用户定义函数) 的方式在执行一些任务时可能性能更高。尽管如此,当数据库不支持这些特性时,还是有其他的替代方法可以达到目的,即使它们有点慢。 可...
标签: PHP
7.2.12 加速 INSERT 插入一条记录花费的时间由以下几个因素决定,后面的数字大致表示影响的比例: 连接:(3) 发送查询给服务器:(2) 解析查询:(2) 插入记录:(1 x 记录大小) 插入索引:(1 x 索引数量) 关闭:(1) 这里并没有考虑初始化时打开数据表的开销,因为每次运行查询只会做这么一次...
标签: PHP
6.5 不同 MySQL 版本之间的同步兼容性 最早的二进制格式是在MySQL 3.23中开发出来的。在MySQL 4.0中改进了,MySQL 5.0又改进了。在配置同步时需要升级服务器的话,它们之间的因果关系在"6.6 Upgrading a Replication Setup"中描述了。 如果只关心同步,任何MySQL 4.1.x版本和MySQL 4.0.x是一样的,因为它们都使用...
标签: PHP
6.4 设置同步 以下描述了如何快速设置 MySQL 同步服务器。假设你打算同步全部的数据库,并且之前没有设置过。需要关闭master服务器以完成全部的步骤。 本章描述的过程可以用于一个slave的情况,也可以用于多个slave的情况。 这只是一个最直接设置slave的办法,并不是只有一个。例如,已经有了master的数据快照...
4.6 管理员的优化 前面各段介绍了普通的MySQL用户利用表创建和索引操作,以及利用查询的编写能够进行的优化。不过,还有一些只能由MySQL管理员和系统管理员来完成的优化,这些管理员在MySQL服务器或运行MySQL的机器上具有控制权。有的服务器参数直接适用于查询处理,可将它们打开。而有的硬件配置问题直接影响查询处理速度,应该对它...

经验教程

518

收藏

90
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部