mysql 分析表结构_<转>使用procedure analyse()分析mysql给出的关于表结构的优化建议...

本文分享了作者在设计MySQL数据库表时对于字段类型的思考过程及优化经验。介绍了如何使用procedure analyse()来获取MySQL官方的字段类型优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

菜鸟时代的我们当初在接到项目分析设计mysql数据库时,或多或少会借鉴于一些成熟的开源项目的数据库设计。

比如设计sns系统数据库时我们有可能会根据自己的数据库知识同时分析借鉴uchome的库结构,一个经典的例子是我在设计论坛数据库时借鉴了dz的帖子表主题表的某些字段冗余的思想,以及大字段水平拆分概念;当初并不知道为什么,更不理解有些甚至背离了数据库设计范式。随着知识的增长概念性,实际情况都在变化。慢慢的知道了一些基础知识

(这里我要推荐一本很好的mysql的书:简朝阳先生的《mysql性能调优与架构设计》,当然我只是泛读了一遍,等待深入研究中)

回归标题要说的内容,我们在设计表时有时候总会思考到底某个字段选用什么类型呢。跨过菜鸟级的phper会有相当的经验直接啪啪啪敲出来,其实我们 在后期调优时也可以使用 procedure analyse();分析表结构看看mysql给我们的字段建议,综合实际情况调整一些字段的类型(这个已经很琐碎了,一般应用都到不了这么细,并且我们 鉴于经验设计的数据库基本都能满足应用。我这里只是了解到了这些知识给自己做个记录而已)。

procedure analyse();语法如下

select column from table_name procedure analyse();

以下引用一段文章:

PROCEDURE ANALYSE 通过分析select查询结果对现有的表的每一列给出优化的建议。

PROCEDURE ANALYSE的语法如下:

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

max_elements (默认值256) analyze查找每一列不同值时所需关注的最大不同值的数量.

analyze还用这个值来检查优化的数据类型是否该是ENUM,如果该列的不同值的数量超过了

max_elements值ENUM就不做为建议优化的数据类型。max_memory(默认值8192) analyze查找每一列所有不同值时可能分配的最大的内存数量

样例程序

------------------------------------------------------------------------------------

mysql> DESC user_account;

+-----------+------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------+------------------+------+-----+---------+----------------+

| USERID | int(10) unsigned | NO | PRI | NULL | auto_increment |

| USERNAME | varchar(10) | NO | | NULL | |

| PASSSWORD | varchar(30) | NO | | NULL | |

| GROUPNAME | varchar(10) | YES | | NULL | |

+-----------+------------------+------+-----+---------+----------------+

4 rows in set (0.00 sec)

mysql> select * from user_account PROCEDURE ANALYSE(1)\G;

*************************** 1. row ***************************

Field_name: ibatis.user_account.USERID

Min_value: 1

Max_value: 103

Min_length: 1

Max_length: 3

Empties_or_zeros: 0

Nulls: 0

Avg_value_or_avg_length: 51.7500

Std: 50.2562

Optimal_fieldtype: TINYINT(3) UNSIGNED NOT NULL

*************************** 2. row ***************************

Field_name: ibatis.user_account.USERNAME

Min_value: dfsa

Max_value: LMEADORS

.........................................................

---------------------------------------------------------------------------------------

从第一行输出我们可以看到analyze分析ibatis.user_account.USERID列最小值1,最大值103,最小长度1,

最大长度3...,并给出了改字段的优化建议:建议将该字段的数据类型改成TINYINT(3) UNSIGNED NOT NULL。

当然以上的东西都很基础,只是我关于近期以及之前所获知识的一个简单总结,记录;大牛们就不要笑话我了,我才刚开始起步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值