http://coolshell.cn/articles/1846.html
http://cloudbbs.org/forum.php?mod=viewthread&tid=17236
比较常识性的文章。
重点介绍一下16条
其中有一个例子:你有一个叫 “last_login” 的字段,它会在每次用户登录时被更新。但是,每次更新时会导致该表的查询缓存被清空。所以,你可以把这个字段放到另一个表中,这样就不会影响你对用户ID,用户名,用户角色的不停地读取了,因为查询缓存会帮你增加很多性能。
Q1: 在我们平时数据库设计中经常使用 update_time 字段,用于标记该条记录在xxx时间被更新,那修改了update_time是否会清楚查询缓存呢?
A1: 必须会!
Q2: 那么是否应该将update_time字段放到其他表中?
A2: 不必,一般来说修改update_time,也会修改该条记录的其他字段。所以清缓存是正常的。这个时候就没有必要分表了。
再介绍一下 procedure analyse
语法: SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])
注意: analyse是基于数据分析的,也就是空表是无法分析的。数据量过小,也仅有参考意义。
场景:数据量较大了,要做分表,拆表,重建表,根据之前的表结构建议,建出来更合理的数据表。
SELECT 后面加了那些字段名,就分析那些字段名。where语句可以限制分析数据的集合。
max_elements: 如果count(distinct column1) < max_elements, 将会推荐enum类型 (仁者见仁智者见智,在我们组内很少使用enum类型)
max_memory: 分析某一列distinct value的时候,分配的最大内存。(推荐使用默认)
参考文献:
http://dev.mysql.com/doc/refman/5.7/en/procedure-analyse.html