MySQL编程 优化篇(五) 优化数据库对象

优化表的数据类型

在MySQL中,可以使用函数PROCEDURE ANALYSE()对当前应用的表进行分析,该函数可以对数据表中列的数据类型提出优化建议,用户可以根据应用的实际情况酌情考虑是否实施优化。

使用方法:

mysql> mysql> select * from t PROCEDURE ANALYSE();
+-------------+-----------+-----------+------------+------------+------------------+-------+-------------------------+--------+------------------------+
| Field_name  | Min_value | Max_value | Min_length | Max_length | Empties_or_zeros | Nulls | Avg_value_or_avg_length | Std    | Optimal_fieldtype      |
+-------------+-----------+-----------+------------+------------+------------------+-------+-------------------------+--------+------------------------+
| icydate.t.a | 1         | 2         |          1 |          1 |                0 |     0 | 1.5000                  | 0.5000 | ENUM('1','2') NOT NULL |
| icydate.t.b | NULL      | NULL      |          0 |          0 |                0 |     2 | 0.0                     | 0.0    | CHAR(0)                |
+-------------+-----------+-----------+------------+------------+------------------+-------+-------------------------+--------+------------------------+
2 rows in set (0.00 sec)

注意

如果表中的数据较少,提出的建议可能不是我们预期的结果。所有,如果是对一个大表进行分析,提出的建议会更准确。

逆规范化

为什么需要?

规范化越高,那么产生的关系就越多,关系过多的直接结果就是导致表之间的连接操作越频繁,而表之间的连接操作是性能比较低的操作,直接影响查询的速度。所以,对于查询较多的应用,就需要根据实际情况运行逆规范化对数据进行设计,通过逆规范化来提高查询的性能。

反规范化的好处是降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,相应带来的问题是可能出现数据完整性问题。加快查询速度,但会降低修改速度。因此,决定做反规范时,一定要权衡利弊。

常用的反规范技术有增加 冗余列、增加派生列、重新组表和分割表

  • 增加冗余列:指在多个表中具有相同的列,它常用来在查询时避免连接操作。

  • 增加派生列:指增加的列来自其他表中的数据,由其他表中的数据经过计算生成。增加的派生列其作用是在查询时减少连接操作,避免使用集函数。

  • 重新组表:指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。

  • 分割表:垂直拆分和水平拆分

提高查询速度

查询如:了解最近一周客户的消费总金额和近一周每天不同时段用户的消费总金额

有三种实现方式:

  1. 直接查询原表,得出想要的结果

  2. 创建中间表,表结构和原表结构完全相同,转移要统计的数据到中间表,然后在中间表进行统计

  3. 创建统计表,凌晨跑任务,将结果汇总到统计表

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值