Mysql建表的一些建议

建表和设计表的时候,应尽量减少表在硬盘中的空间。好处是什么?减少与硬盘的交互次数;执行查询语句的时候,越小的表占用的主内存越小;越小的表将减少索引大小,使索引查询的时候会得到更快的响应速度。

在建表的时候,应该通过以下几个维度考虑提升性能:

1,Table column(列);

         根据存储数据的大小,设置合理的column的数据类型,如一个代表状态的字段,status范围为0到1,则设置mediumint明显比int更合理,因为int占用的空间比mediumint多25%;

          尽量将column设置为 NOT NULL,设置为NOT NULL将节省硬盘空间,执行查询语句的时候更好的使用索引。设置为默认NULL将多占用1bit的空间

           设置主键的时候,最好使用数字而不是字符串,大的数字占用的空间比相同含义的字符串小。

2,Row Format(行格式化);

          Innodb默认的row format为DYNAMIC,可以通过innodb_default_row_format设置默认值,也可以在CREATE TABLE     或者ALTER TABLE的时候指定row_format。

    row_format选项包含COMPACT,DYNAMIC,COMPRESSED,通过增加对CPU的使用来达到降低对硬盘的使用空间

          如果当前的环境性能因为缓存命中率和硬盘读写速度受到制约,则设置row format将会提高读写性能。很少因为                 CPU的性能使mysql的读写受到限制,这种情况下,使用row format将使mysql更慢。

         mysql对设置为可变长度字符集,例如utf8mb3 ,utf8mb4的char(N)列进行了优化。当row_format = REDUNDANT           时(固定长度存储),char占用N x 字符集最大字节数的空间。许多编程语言使用utf8字符集时,主要使用单字节,所以固定             的存储长度经常会浪费空间。row_format设置为COMPACT,DYNAMIC,COMPRESSED时,Innodb会根据这些列实际的存             储长度(在N --- N x 字符集最大字节数变动)存储,去掉后面一些不必要的0位空间。

           进一步节省硬盘空间,建Innodb表的时候,使用ROW_FORMAT=COMPRESSED;

3,Indexes(索引);

           建主键的时候,应该越小越好,越小的主键将会获得更好的查询性能。对于INNODB表来说,主键存在于表中的每              个二级索引中(在创建索引的时候,mysql会默认将主键作为二级索引的一部份),所以越小的主键将会使每个索引占用的            空间大大减少。

           索引会提升查询性能,但是会降低插入、更新和删除的性能。如果执行查询语句的时候更多是和其他列联合查询,            建联合索引比给每个column建索引要更好。

            在长字符串column中,最好取字段值的最左端前缀作为索引,而不是整个字段。

4,Join(交叉查询);

           为了使join查询的时候性能更好,相关联的字段应设置相同的字段名,设置相同的字段数据类型;

          列名的长度应尽量短,如一个表为student,建列的时候name比sdudent_name更好。列名的长度,应小于18个字符           长度;

          将大表拆分成2个或多个表;

5,Normalization(标准化);

          通常情况下,尽量存储不重复的数据。将一些名称列设置一个唯一ID存储在小表格中,其他表要使用的时候,只存             储ID的值,在查询语句里面通过关联ID查询出名称。

          当然如果性能比空间更重要,则可以适当放宽标准化限制,可将一些列信息冗余或者创建汇总表来加快查询速度。

猜你喜欢

转载自blog.csdn.net/u013262534/article/details/82798090