mysql优化

一、索引优化管理:

  索引的管理过程,即索引创建和维护的方式,能够影响到SQL语句的性能。

  1、整合DDL语句

  在将索引添加到MySQL表的过程中,一个需要注意的管理问题就是DDL语句是阻塞性的。在之前,由于ALTER语句的阻塞性影响,执行ALTER语句时需要为表创建一个副本。在改变大型表时,这个操作将消耗大量的时间和磁盘空间。有了在MySQL5.1中首次出现的InnoDB插件以及其他第三方存储引擎,各种ALTER语句现在运行非常迅速,因为他们不再执行全表复制了。

  把多条ALTER语句整合成一条SQL语句是一种简单的优化改进。例如多条ALTER语句的合并如下:

ALTER TABLE test

      ADD INDEX (username),

  DROP INDEX name,

  ADD INDEX name(last_name,first_name)

  ADD COLUMN last_visit DATE NULL;

  2、去除重复索引

  重复的索引主要有两个影响:一,所有DML语句都会运行的更慢,因为需要做更多的工作来保持数据和索引的一致性;二,数据库的磁盘占用会更大,这会导致备份和回复的时间增加。这里主要是多列索引的最左边的索引列与单列索引的重复。

  3、删除不用的索引

  除了重复的索引没有被使用到之外,还有其他索引可能也没有被使用。这些索引和重复索引一样会影响性能。官方MySQL产品没有提供识别不用的索引的方法,然而,一些其他版本的MySQL提供了这个特性。Google的MySQL补丁(http://code.google.com/google-mysql-tool/wiki/Mysql5Patches)首次引入了SHOW INDEX_STATISTICS功能。

  4、监控无效的索引

  当定义多列索引时,一定要注意确定所有指定的每一列是否整的有效。官方MySQL产品同样没有提供任何相关的说明。可以通过分析指定表上的所有SQL语句的key_len列来找到那些可能包含但没有使用到的索引。

  

二、索引列的改进

  除了创建新的索引来改进查询的性能之外,还可以通过其他模式优化的方法来改进数据库的性能,包括使用特定的数据类型以及/或者列类型。这样做的好处是可以使用更小的磁盘空间,从而减少I/O的开销,并且是的更多的索引数据可以被打包装载进可用的系统内存中。

  1、数据类型

  有几种数据类型是可以被替换或修改的,而且这样做几乎不会对已有的模式造成任何影响。

    1)BIGINT 和 INT

  当一个着吗被定义为BIGINT AUTO_INCREMENT 数据类型时,一般来说不需要搞清楚这个数据类型存在的原因。一个INT UNSIGNED AUTO_INCREMENT 数据类型能够支持的最大值是43亿。如果一个表包含的行数超过43亿,除了使用BIGINT数据类型外,还有其他架构因素需要考虑。把主码列的数据类型从BIGINT改为UNSIGNED INT的影响是此列中每行的容量减小50%,即从8字节减少到4字节。

 

今天先写到这里,后面还有很多内容。

posted @ 2016-11-20 22:08  Burning_Leaf  阅读(268)  评论(0编辑  收藏  举报