Heim >Datenbank >MySQL-Tutorial >mysql 优化篇之数据库对象_MySQL

mysql 优化篇之数据库对象_MySQL

WBOY
WBOYOriginal
2016-06-01 13:27:091012Durchsuche

bitsCN.com

(1)优化表的数据类型

     表需要使用何种数据类型,是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不推荐让很多字段都留有大量的冗余,这样即浪费存储也浪费内存。 我们可以使用PROCEDURE ANALYSE()对当前已有应用的表类型的判断,该函数可以对数据表中的列的数据类型提出优化建议,可以根据应用的实际情况酌情考虑是否实施优化。 语法:

SELECT * FROM tbl_name PROCEDURE ANALYSE();SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);

 

    输出的每一列信息都会对数据表中的列的数据类型提出优化建议。第二个例子告诉PROCEDURE ANALYSE()不要为那些包含的值多于16个或者256字节的ENUM类型提出建议。如果没有这样的限制,输出信息可能很长;ENUM定义通常很难阅读。 在对字段类型进行优化时,可以根据统计信息并结合应用的实际情况对其进行优化。

(2)通过拆分,提高表的访问效率
    这里我们所说的拆分,主要是针对Myisam类型的表,拆分的方法可以分成两种情况:
      1. 纵向拆分: 纵向拆分是只按照应用访问的频度,将表中经常访问的字段和不经常访问的字段拆分成两个表,经常访问的字段尽量是定长的,这样可以有效的提高表的查询和更新的效率。
      2. 横向拆分: 横向拆分是指按照应用的情况,有目的的将数据横向拆分成几个表或者通过分区分到多个分区中,这样可以有效的避免Myisam表的读取和更新导致的锁问题。

(3)逆规范化
    数据库德规范化设计强调数据的独立性,数据应该尽可能少地冗余,因为存在过多的冗余数据,这就意味着要占用了更多的物理空间,同时也对数据的维护和一致性检查带来了问题。 但是对于查询操作很多的应用,一次查询可能需要访问多表进行,如果通过冗余纪录在相同表中,更新的代价增加不多,但是查询操作效率可以有明显提高,这种情况就可以考虑通过冗余数据来提高效率。

(4)使用冗余统计表
    使用create temporary table语法,它是基于session的表,表的数据保存在内存里面,当session断掉后,表自然消除。 对于大表的统计分析,如果统计的数据量不大,利用insert。。。select将数据移到临时表中比直接在大表上做统计要效率更高。

(5)选择更合适的表类型
     1、如果应用出现比较严重的锁冲突,请考虑是否更改存储引擎到innodb,行锁机制可以有效的减少锁冲突的出现。
     2、如果应用查询操作很多,且对事务完整性要求不严格,则可以考虑使用Myisam存储引擎。 更多存储引擎选择的原则,请参考开发篇的相关章节。

bitsCN.com
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn