四.数据库结构优化

来源:互联网 发布:淘宝网品牌旗舰店 编辑:程序博客网 时间:2024/05/22 13:16

一.选择合适的数据类型

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

举例:
①使用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 12:23:00'));

②使用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;

二.范式化

所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性.

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息

三.反范式化

四.表的垂直拆分

解决:表的宽度问题(及字段非常多)
定义:把原来一个有很多列的表拆分成多个表.
通常垂直拆分可以按以下原则进行:
1.把不常用的字段单独存放到一个表中.
2.把大字段独立存放到一个表中.
3.把经常一起使用的字段放到一起.

五.表的水平拆分

解决:数据量过大
定义:把原来的数据量非常大的表水平拆分多个表,每个表中的字段都是一样的.

0 0
原创粉丝点击