设为首页 收藏本站
查看: 857|回复: 0

[经验分享] MySQL优化之数据库结构:数据对象优化

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-3 09:06:20 | 显示全部楼层 |阅读模式
使用PROCEDURE ANALYSE函数优化表的数据类型

表需要使用何种数据类型,是需要根据应用来判断的。在MySQL中,可以使用函数PROCEDURE ANALYSE()对当前应用的表进行分析,该函数可以对数据库中列的数据类型提出优化建议,用户可以根据应用的实际情况斟酌考虑是否实施优化。

以下是函数PROCEDURE ANALYSE()的使用方法:
SELECT * FROM tbl_name PROCEDURE ANALYSE();
SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);
输出的每一列信息都会对数据表中的列的数据类型提出优化建议。以上第二个语句告诉PROCEDURE ANALYSE()不要为那些包含的值多于16个或者256字节的ENUM类型提出建议。如果没有这样的限制,输出信息可能很长;ENUM定义通常很难阅读。

根据PROCEDURE ANALYSE()函数的输出信息,用户可能会发现,一些表中的字段可以修改为更加高效的数据类型。如果决定改变某个字段的类型,则需要使用ALTER TABLE语句。

[python] view plaincopy
mysql> desc statistics_news_category_history;  
+---------------+-------------+------+-----+---------+----------------+  
| Field         | Type        | Null | Key | Default | Extra          |  
+---------------+-------------+------+-----+---------+----------------+  
| id            | int(10)     | NO   | PRI | NULL    | auto_increment |   
| news_category | varchar(20) | YES  |     | NULL    |                |   
| news_num      | int(10)     | YES  |     | NULL    |                |   
| news_date     | varchar(10) | YES  |     | NULL    |                |   
+---------------+-------------+------+-----+---------+----------------+  
4 rows in set (0.00 sec)  

[python] view plaincopy
mysql> select * from statistics_news_category_history procedure analyse(9,256)\G;  
*************************** 1. row ***************************  
             Field_name: datacrawldb.statistics_news_category_history.id  
              Min_value: 26  
              Max_value: 30  
             Min_length: 2  
             Max_length: 2  
       Empties_or_zeros: 0  
                  Nulls: 0  
Avg_value_or_avg_length: 28.0000  
                    Std: 1.4142  
      Optimal_fieldtype: TINYINT(2) UNSIGNED NOT NULL  
*************************** 2. row ***************************  
             Field_name: datacrawldb.statistics_news_category_history.news_category  
              Min_value: bigdata  
              Max_value: test  
             Min_length: 4  
             Max_length: 10  
       Empties_or_zeros: 0  
                  Nulls: 0  
Avg_value_or_avg_length: 6.6000  
                    Std: NULL  
      Optimal_fieldtype: ENUM('bigdata','cloud','datacenter','storage','test') NOT NULL  
*************************** 3. row ***************************  
             Field_name: datacrawldb.statistics_news_category_history.news_num  
              Min_value: 1  
              Max_value: 33  
             Min_length: 1  
             Max_length: 2  
       Empties_or_zeros: 0  
                  Nulls: 0  
Avg_value_or_avg_length: 19.4000  
                    Std: 11.9766  
      Optimal_fieldtype: TINYINT(2) UNSIGNED NOT NULL  
*************************** 4. row ***************************  
             Field_name: datacrawldb.statistics_news_category_history.news_date  
              Min_value: 2014-02-17  
              Max_value: 2014-02-17  
             Min_length: 10  
             Max_length: 10  
       Empties_or_zeros: 0  
                  Nulls: 0  
Avg_value_or_avg_length: 10.0000  
                    Std: NULL  
      Optimal_fieldtype: ENUM('2014-02-17') NOT NULL  
4 rows in set (0.00 sec)  

优化小技巧

1) 使用正确合适的类型,不要将数字存储为字符串。

2) 尽可能地使用最有效(最小)的数据类型。MySQL有很多节省磁盘空间和内存的专业化类型。

3) 尽可能使用较小的整数类型使表更小。例如,MEDIUMINT经常比INT好一些,因为MEDIUMINT列使用的空间要少25%。

4) 如果可能,声明列为NOT NULL。它使任何事情更快而且每列可以节省一位。注意如果在应用程序中确实需要NULL,应该毫无疑问使用它,只是避免默认地在所有列上有它。

5) 对于MyISAM表,如果没有任何变长列(VARCHAR、TEXT或BLOB列),使用固定尺寸的记录格式。这比较快但是不幸地可能会浪费一些空间。即使你已经用CREATE选项让
VARCHAR列ROW_FORMAT=fixed,也可以提示想使用固定长度的行。

6) 使用sample character set,例如latin1。尽量少使用utf-8,因为utf-8占用的空间是latin1的3倍。可以在不需要使用utf-8的字段上面使用latin1,例如mail,url等。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-15343-1-1.html 上篇帖子: MySQL的安装(详细图解) 下篇帖子: MySQL语句相关经验总结 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表