mysql优化-数据表设计
2020-03-18 15:56:34 来源:admin 点击:779
1.存储引擎的选择
Myisam: 数据文件、索引文件---更好的I/O和访问速度(全文索引)
Innodb:事务处理(ACID)(Btree/哈希)
2、选择合适的数据类型
Myisam:使用固定长度的字段
Innodb:使用varchar类型
2.1、字符串:
Char:自动删除尾部空格 ,定长
varchar:用来存储变长的东西,多出来的会被截断
整型: tinyint(1) int(10)
注意一点:int(3)能不能存入1234 ,答案是可以3代表最小宽度,能村多少数和int有关。如果zerofill 则12前面会补0
2.2、文本:Text/blob:
大量的删除和更新操作需要执行碎片整理(OPTIMIZE TABLE),查询时会使用临时表,很可怕
使用合成索引;
单独设计表;
2.3、小数:decimal/float/double
Decimal(10,2)
Decimal存的数可能比bigint还大,可以用来存钱,或者小数位数多的
2.4、常用字段/不常用字段
表的拆分、业务的拆分
时间一般用timestamp或者int时间戳
2.5、字符集选择
Utf-8
2.6列属性尽量该写的都写上,比如auto_increment \default\not null \zreofill
3.选择合适的类型
3.1使用int来存时间,可以节约空间,但是在查询是需要转换
3.2使用bigint来存ip
4.三大范式
什么是三大范式:
第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。
第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。
第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.
注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性