spring jdbc 配置

Spring JDBC Configuration

数据库设计调优

表设计

数据库表设计可以按照标准化或者非标准化设计(范式),每种方式有各自的优缺点。对于标准化字段结构,可以使数据库中的字段非常简洁,并且没有冗余的数据存储,但是这又带来另一个问题,就是在使用查询的时候,因为标准化的设计使得很多数据是在某些表中的,必须跨表查询,联结(join)查询带来的是查询效率的问题,所以比较好的方法就是这种标准化以及非标准化设计,对于某些字段,可以进行适当的冗余,以提高查询的效率。

  • 表的垂直拆分
    在垂直拆分表时,我们将一个大表中的字段拆分到不同的表中去,一般涉及到性能问题是大表中的某些字段比较长,比如是text或者blob类型的,最好单独拆分到另一个表中去存储,对于需要频繁使用的业务表,不应该存储比较大的字段影响性能。
    一般在JPA/Hibernate这种orm框架中,对于这些单独的大字段,拆分表以后,可以对这些设置为lazily loaded懒加载模式(在一个新的表中,懒加载模式下,只有使用到该字段时才会去查询加载),可以明显的提升性能。
  • 使用索引(indexing)
    索引是提高查询效率的最好方式之一。

    • 为了最大化的利用索引,索引应该是where,order by或者group by条件语句中频繁使用的字段。
    • 尽量使用整型(integer)类型的列作为索引。该类型占用空间比较小,所以I/O处理更快。(实际上很多索引一般都是字符串的)
    • 聚合索引(clustered)索引一般是范围查询更好,非聚合索引通常单点查询效率更高。

    需要注意的是,索引不是越多越好,因为索引是会占用额外的存储空间的,并且对于大字段(比较长的字段,比如很长的字符串,或者text这种数据格式)最好不要使用索引,对于需要频繁跟新的字段,尽量也不要设置为索引,因为更新后索引部分也需要进行相应的更新,这会影响数据库的性能。

  • 使用正确的数据类型
    正确的数据类型不仅能够节省数据占用的磁盘空间,并且还能一定程度的提高数据的查询效率。
    例如,一个smallint数据占用2比特空间,但是一个int数据要占用4比特空间,如果smallint能存下的字段没有必要使用更大类型字段去存储。对于同样量的数据,更大的空间以为这数据库读取的时候需要读取更大的存储区域,一定程度上影响性能。
    同时,正确的数据类型还可以帮助我们存储数据的正确性,比如int类型的字段当存入字符串或者日期类型时会失败。

  • 定义列限制条件(constraints)
    列限制条件强制限制了数据或者数据类型可以在表中进行的插入、更新、删除操作。列限制的目的是保持对于数据的更新、删除、插入的完整。但是还是需要合理的使用,比如定义not null限制时不会影响太大,但是使用check限制条件时,就需要考虑一下性能影响了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值