MySQL优化表结构

发布时间: 2023-11-21 11:46 阅读: 文章来源:1MUMB2178PS
概述

很多时候我们在设计数据库表结构的时候一般都是凭经验,或者根据业务的具体情况然后设定表字段的大小、类型等,那么有没有什么好的办法来帮助我们优化mysql数据库表结构呢?

一、Procedure Analyse

PROCEDURE ANALYSE() ,在优化表结构时可以辅助参考分析语句。通过分析select查询结果对现有的表的每一列给出优化的建议。

利用此语句,MySQL 帮你去分析你的字段和其实际的数据,并会给你一些有用的建议。

【只有表中有实际的数据,这些建议才会变得有用,因为要做一些大的决定是需要有数据作为基础的。】

例如,如果你创建了一个 INT 字段作为你的主键,然而并没有太多的数据,那么,PROCEDURE ANALYSE()会建议你把这个字段的类型改成 MEDIUMINT 。或是你使用了一个 VARCHAR 字段,因为数据不多,你可能会得到一个让你把它改成 ENUM 的建议。这些建议,都是可能因为数据不够多,所以决策做得就不够准。

我们在设计表时有时候总会思考到底某个字段选用什么类型呢。其实我们在后期调优时也可以使用 procedure analyse();分析表结构看看mysql给我们的字段建议,综合实际情况调整一些字段的类型(这个已经很琐碎了,一般应用都到不了这么细,并且我们鉴于经验设计的数据库基本都能满足应用。

二、语法

PROCEDURE ANALYSE的语法如下:

select ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])

max_elements:指定每列非重复值的最大值,当超过这个值的时候,MySQL不会推荐enum类型。(默认值256)

max_memory (默认值8192)analyse()为每列找出所有非重复值所采用的最大内存大小。

执行返回中的Optimal_fieldtype列是mysql建议采用的列。

三、实例

1、准备一张有数据的测试表

这里拿生产环境一张表来测试

mysql> show create table sys_user \G;

2、结构分析

为以上表执行结构分析:

select * FROM SYS_USER PROCEDURE ANALYSE() \G;

得到分析结果:

从以上表格可以看出,分析出了字段最小值,最大值,最小长度,最大长度,还有最后Optimal_fieldtype代表了表结构建议,

3、优化调整

可以根据数据分析建议来修改表结构,使之更符合数据存储规范。

总结

从上面这个例子我们可以看出analyze能根据目前表中的数据情况给出优化建议。当数据库在生产环境运行一定时间以后,开发或是DBA能参考analyze的分析结果来对表结构做出一定的优化。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

•••展开全文