[转]MySQL性能优化的最佳20+条经验

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

 

posted @ 2013-08-08 11:52  代码会说话  阅读(168)  评论(0编辑  收藏  举报