知识大全 MySQL性能优化全攻略- 相关数据库命令

Posted 命令

篇首语:身不饥寒,天未曾负我;学无所获,我何以对天。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 MySQL性能优化全攻略- 相关数据库命令相关的知识,希望对你有一定的参考价值。

MySQL性能优化全攻略- 相关数据库命令  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  我们要讨论的是数据库性能优化的另一方面 即运用数据库服务器内建的工具辅助性能分析和优化     ▲ SHOW    执行下面这个命令可以了解服务器的运行状态     mysql >show status;    该命令将显示出一长列状态变量及其对应的值 其中包括 被中止访问的用户数量 被中止的连接数量 尝试连接的次数 并发连接数量最大值 以及其他许多有用的信息 这些信息对于确定系统问题和效率低下的原因是十分有用的     SHOW命令除了能够显示出MySQL服务器整体状态信息之外 它还能够显示出有关日志文件 指定数据库 表 索引 进程和许可权限表的宝贵信息 请访问了解更多信息     ▲ EXPLAIN  EXPLAIN能够分析SELECT命令的处理过程 这不仅对于决定是否要为表加上索引很有用 而且对于了解MySQL处理复杂连接的过程也很有用     下面这个例子显示了如何用EXPLAIN提供的信息逐步地优化连接查询 (本例来自MySQL文档 见 原文写到这里似乎有点潦草了事 特加上此例 )    假定用EXPLAIN分析的SELECT命令如下所示     EXPLAIN SELECT tt TicketNumber tt TimeIn   tt ProjectReference tt EstimatedShipDate   tt ActualShipDate tt ClientID   tt ServiceCodes tt RepetitiveID   tt CurrentProcess tt CurrentDPPerson   tt RecordVolume tt DPPrinted et COUNTRY   et_ COUNTRY do CUSTNAME  FROM tt et et AS et_ do  WHERE tt SubmitTime IS NULL  AND tt ActualPC = et EMPLOYID  AND tt AssignedPC = et_ EMPLOYID  AND tt ClientID = do CUSTNMBR;    SELECT命令中出现的表定义如下     ※表定义    表 列 列类型  tt ActualPC CHAR( )  tt AssignedPC CHAR( )  tt ClientID CHAR( )  et EMPLOYID CHAR( )  do CUSTNMBR CHAR( )    ※索引    表 索引  tt ActualPC  tt AssignedPC  tt ClientID  et EMPLOYID (主键)  do CUSTNMBR (主键)    ※tt ActualPC值分布不均匀    在进行任何优化之前 EXPLAIN对SELECT执行分析的结果如下     table type possible_keys key key_len ref rows Extra  et ALL PRIMARY NULL NULL NULL   do ALL PRIMARY NULL NULL NULL   et_ ALL PRIMARY NULL NULL NULL   tt ALL AssignedPC ClientID ActualPC NULL NULL NULL   range checked for each record (key map: )    每一个表的type都是ALL 它表明MySQL为每一个表进行了完全连接!这个操作是相当耗时的 因为待处理行的数量达到每一个表行数的乘积!即 这里的总处理行数为 * * * =     这里的问题之一在于 如果数据库列的声明不同 MySQL(还)不能有效地运用列的索引 在这个问题上 VARCHAR和CHAR是一样的 除非它们声明的长度不同 由于tt ActualPC声明为CHAR( ) 而et EMPLOYID声明为CHAR( ) 因此这里存在列长度不匹配问题     为了解决这两个列的长度不匹配问题 用ALTER TABLE命令把ActualPC列从 个字符扩展到 字符 如下所示     mysql > ALTER TABLE tt MODIFY ActualPC VARCHAR( );    现在tt ActualPC和et EMPLOYID都是VARCHAR( )了 执行EXPLAIN进行分析得到的结果如下所示     table type possible_keys key key_len ref rows Extra  tt ALL AssignedPC ClientID ActualPC NULL NULL NULL where used  do ALL PRIMARY NULL NULL NULL   range checked for each record (key map: )  et_ ALL PRIMARY NULL NULL NULL   range checked for each record (key map: )    et eq_ref PRIMARY PRIMARY tt ActualPC     这还算不上完美 但已经好多了(行数的乘积现在少了一个系数 ) 现在这个SQL命令执行大概需要数秒钟时间     为了避免tt AssignedPC = et_ EMPLOYID以及tt ClientID = do CUSTNMBR比较中的列长度不匹配 我们可以进行如下改动     mysql > ALTER TABLE tt MODIFY AssignedPC VARCHAR( )   MODIFY ClientID VARCHAR( );    现在EXPLAIN显示的结果如下     table type possible_keys key key_len ref rows Extra  et ALL PRIMARY NULL NULL NULL   tt ref AssignedPC ClientID ActualPC ActualPC et EMPLOYID where used  et_ eq_ref PRIMARY PRIMARY tt AssignedPC   do eq_ref PRIMARY PRIMARY tt ClientID     这个结果已经比较令人满意了     余下的问题在于 默认情况下 MySQL假定tt ActualPC列的值均匀分布 而事实上tt表的情况并非如此 幸而 我们可以很容易地让MySQL知道这一点     shell > myisamc analyze PATH_TO_MYSQL_DATABASE/tt  shell > mysqladmin refresh    现在这个连接操作已经非常理想 EXPLAIN分析的结果如下     table type possible_keys key key_len ref rows Extra  tt ALL AssignedPC ClientID ActualPC NULL NULL NULL where used  et eq_ref PRIMARY PRIMARY tt ActualPC   et_ eq_ref PRIMARY PRIMARY tt AssignedPC   do eq_ref PRIMARY PRIMARY tt ClientID     ▲ OPTIMIZE    OPTIMIZE能够恢复和整理磁盘空间以及数据碎片 一旦对包含变长行的表进行了大量的更新或者删除 进行这个操作就非常有必要了 OPTIMIZE当前只能用于MyISAM和BDB表     结束语 从编译数据库服务器开始 贯穿整个管理过程 能够改善MySQL性能的因素实在非常多 本文只涉及了其中很小的一部分 尽管如此 我们希望本文讨论的内容能够对你有所帮助 cha138/Article/program/MySQL/201311/29426

相关参考

知识大全 MySQL数据库性能优化的实际操作方案

MySQL数据库性能优化的实际操作方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下的文章

知识大全 MySQL数据库性能优化的实际操作方案[1]

MySQL数据库性能优化的实际操作方案[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 MySQL数据库性能优化的实际操作方案[6]

MySQL数据库性能优化的实际操作方案[6]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 MySQL数据库性能优化的实际操作方案[5]

MySQL数据库性能优化的实际操作方案[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 MySQL数据库性能优化的实际操作方案[4]

MySQL数据库性能优化的实际操作方案[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 MySQL数据库性能优化的实际操作方案[3]

MySQL数据库性能优化的实际操作方案[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 MySQL数据库性能优化的实际操作方案[2]

MySQL数据库性能优化的实际操作方案[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 完全优化MySQL数据库性能的八大巧方法

完全优化MySQL数据库性能的八大巧方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文从八

知识大全 MySQL性能优化实战

MySQL性能优化实战  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这段时间由于线上数据库经常

知识大全 mysql集群表优化

  我们知道MySQLCluster产品用的主要的引擎为NDB很多人说对于NDB来说执行SQL语句的性能很差但是我觉得主要是没有仔细的探索  对于数据库来说要判断他的性能如何无非是要看两点  对于数据