Fork me on GitHub

MySQL优化-数据表结构优化

注意:所有文章除特别说明外,转载请注明出处.

MySQL优化 - 数据表结构优化

选择合适的数据类型

1.使用可以存下我们数据最小的数据类型。
2.使用简单的数据类型,int要比varchar类型在mysql处理上简单。
3.尽可能的使用not null定义字段。
4.尽量少用text类型,非用不可的时候考虑分表。
例:

    1.使用int来存储日期时间,利用 FROM_UNIXTIME(), UNIX_TIMESTAMP()两个函数来进行转换。

        create table test(id int auto_increment not null), timestr int, primary key(id);

        insert into test(timestr) values(UNIX_TIMESTAMP('2014-06-01 13:12:00'));

        select FROM_UNIXTIME(timestr) FROM test;

    2.使用bigint来存储ip地址,利用 INET_ATON(), INET_NTOA() 两个函数来进行转换。

        create table sessions(id int auto_increment not null, ipaddress bigint, primary key(id));

        insert into sessions(ipaddress) values(INET_ATON('192.168.0.1'));

        select INET_NTOA(ipaddress) from sessions;

表的范式化和反范式化

范式化是值数据库设计的规范,目前说到的范式化是指第三设计范式,即要求数据表中不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式。不符合第三范式要求的表存在下列问题:

1.数据冗余:(分类,分类描述)对于每一个商品都会进行记录。
2.数据的插入异常。
3.数据的更新异常。
4.数据的删除异常。

提示:解决不符合第三范式表的方法是将该表分表,建立不同的表。

反范式化表示为了查询效率的考虑将原本符合第三范式的表适当增加冗余,达到优化查询效率的目的,反范式化是一种以空间来换取时间的操作。

表的垂直拆分

垂直拆分表示将原来一个有很多列的表拆分成多个表,这解决了表的宽度过宽问题,通常情况下表的垂直拆分可以按照以下原则进行:

1.将不太常用的字段单独存放在一个表中。
2.将大字段独立存放在一个表中。
3.将经常一起使用的字段放在一起。

表的水平拆分

水平拆分是为了解决单表中数据量过大的问题,水平拆分的每一个表的结构都是完全一致的。这一拆分解决了表的数据量问题。

表水平拆分方法:对id进行hash运算(取模),如果拆分成5个表,则使用mod(id)取出0-4个值,针对不同的hashID将数据存到不同的表中。

本文标题:MySQL优化-数据表结构优化

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月29日 - 08:20:39

原始链接:http://bangjinhu.github.io/undefined/MySQL优化 - 表结构优化/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.