本文共 1716 字,大约阅读时间需要 5 分钟。
在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)
注意:
如果表中的数据较少,提出的建议可能不是我们预期的结果。所有,如果是对一个大表进行分析,提出的建议会更准确。
为什么需要?
规范化越高,那么产生的关系就越多,关系过多的直接结果就是导致表之间的连接操作越频繁,而表之间的连接操作是性能比较低的操作,直接影响查询的速度。所以,对于查询较多的应用,就需要根据实际情况运行逆规范化对数据进行设计,通过逆规范化来提高查询的性能。
反规范化的好处是降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,相应带来的问题是可能出现数据完整性问题。加快查询速度,但会降低修改速度。因此,决定做反规范时,一定要权衡利弊。
常用的反规范技术有增加 冗余列、增加派生列、重新组表和分割表。
增加冗余列:指在多个表中具有相同的列,它常用来在查询时避免连接操作。
增加派生列:指增加的列来自其他表中的数据,由其他表中的数据经过计算生成。增加的派生列其作用是在查询时减少连接操作,避免使用集函数。
重新组表:指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
分割表:垂直拆分和水平拆分
查询如:了解最近一周客户的消费总金额和近一周每天不同时段用户的消费总金额
有三种实现方式:
直接查询原表,得出想要的结果
创建中间表,表结构和原表结构完全相同,转移要统计的数据到中间表,然后在中间表进行统计
创建统计表,凌晨跑任务,将结果汇总到统计表
转载地址:http://iiqen.baihongyu.com/