表结构优化



1.表结构优化
1适当拆分
对于开发人员,可能希望将一个完整的对象对应于一张数据库表,但是有些时候会在性能上带来较大的问题。当我们表中存在类似于text或者是很大的varchar类型的大字段的时候,如果我们大部分访问这张表的时候都不要这个字段,就该将其拆分到另外的独立表中。
2适度冗余
被频繁引用且只能通过join 2张(或者更多)大表的方式才能得到的独立小字段 适度冗余的同时需要确保数据的一致性不会遭到破坏
3尽量使用not null
Null类型会进入索引中。如果是一个组合索引,那么这个null类型的字段会极大影响整个索引的效率。此外,null在索引中的处理也是特殊的,也会占用而外的存放空间。使用null虽然在空间确实有一定节省,倒是带来了很多其他的优化问题,不但没有将io量省下来,反而加大了sql的io量。所以尽量确保default不是null。


2.列类型优化
1.使用定长列,如果能够承受得起空间的耗费,使用定长行将比使用可变长的行处理快得多
2.在较短的列能够满足要求的时候不要使用较长的列
3.将列定义为not null,处理更快、所需空间更少。而且有时还能简化查询(不需要检查是否存在特例null)
4.考虑使用ENUM列
如果只含有限数目的特定值的列,应该考虑将其转换为ENUM列。ENUM列的值可以更快地处理,因为它们在内部都是以数值表示的。
5.使用procedure analyse(),查看它所提供的关于表中列的信息:
select * from tbl_name procedure analyse()//关于表中每列的最佳列类型的建议
select * from tbl_name procedure analyse(16,256)//不要建议多于16个值或取多于256字节的ENUM类型
6.将数据装入BLOB
优:有可能使原来需要几个检索操作才能完成的数据检索得以在单个检索中完成
缺:在进行大量的delete或update操作时,删除blob会在表中留下一个大空白,在以后将需要用一个记录或可能是不同大小的多个记录来填充
7.对容易产生碎片的表使用optimize table,大量进行修改的表,特别是哪些还有可变长列的表,经常使用optimize table有助于保持性能不下降。
8.使用合成索引
合成索引列有时很有用。一种技术是根据其他列建立一个散列值,并将其存储在一个独立的列中,然后通过搜索散列值找到行(这只对精确匹配的查询有效)。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值