就拿常见的用户表、文章类的表、日志表来分析如下
CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'user id',
  `name` varchar(255) NOT NULL COMMENT 'user name',
  `password` char(41) NOT NULL COMMENT 'user password',
  `email` varchar(64) NOT NULL COMMENT 'user email',
  `mobile` char(11) NOT NULL COMMENT 'user mobile phone',
  `remark` text COMMENT 'user remark',
  `subscribed` tinytext COMMENT '是否订阅稿件,针对实例',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT 'user status(1:待审核,2:审核通过,3:驳回,4:预留状态,5:预留状态)',
  `is_super` tinyint(4) NOT NULL DEFAULT '0' COMMENT '用户权限:0:普通用户 1:超级管理员 2 普通管理员',
  `is_recommend` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否允许推荐[0:不允许1:允许]',
  `login_time` int(11) DEFAULT NULL COMMENT '最近一次登录时间',
  `login_cur` int(11) DEFAULT '0' COMMENT '当前登录时间',
  `create_time` int(11) NOT NULL COMMENT 'create time',
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'last modify time',
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`) USING BTREE,
  UNIQUE KEY `email_2` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=273 DEFAULT CHARSET=utf8 COMMENT='用户基本信息'
 
CREATE TABLE `news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pid` mediumint(9) NOT NULL COMMENT '实例id',
  `catid` mediumint(10) NOT NULL DEFAULT '0' COMMENT '分类id',
  `module` char(5) NOT NULL DEFAULT 'text' COMMENT '稿件模型',
  `item_id` varchar(50) DEFAULT NULL COMMENT '文章id',
  `tag_id` varchar(10) DEFAULT NULL COMMENT '分类;news:闻 6_7,listen:听 163_164,comment:评 161_162,focus:首页焦点 6,imp_news:要闻 10',
  `tag_type` varchar(20) DEFAULT NULL COMMENT '分类标签; 例如 时局,时评,碰撞',
  `title` varchar(200) NOT NULL COMMENT '文章标题',
  `content_title` varchar(100) DEFAULT NULL COMMENT '短标题',
  `sub_title` varchar(100) DEFAULT NULL COMMENT '副标题',
  `intro_title` varchar(100) DEFAULT NULL COMMENT '肩标题',
  `keywords` varchar(255) NOT NULL COMMENT '关键字列表,关键字之间用“|”分隔',
  `time` char(11) NOT NULL COMMENT '时间',
  `authors` varchar(100) DEFAULT NULL COMMENT '作者',
  `update_time` varchar(11) DEFAULT NULL COMMENT '文章更新时间',
  `description` varchar(200) DEFAULT NULL COMMENT '描述',
  `content` text COMMENT '文章内容',
  `doings_source` varchar(100) DEFAULT NULL COMMENT '来源',
  `show_type` tinyint(4) DEFAULT '0' COMMENT '1是大图,2是一张小图,3是三张图,4是图列表的一张大图,5是图列表的两张图,6是关键字搜索,7快讯',
  `image_list` text COMMENT '图片列表',
  `url` varchar(200) DEFAULT NULL COMMENT '未知',
  `share_url` varchar(300) DEFAULT NULL COMMENT '备用 文章分享地址',
  `audio` text COMMENT '音频信息',
  `video` text COMMENT '视频信息',
  `createtime` int(10) NOT NULL DEFAULT '0' COMMENT '文章创建时间',
  `modifytime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `is_del` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除[0:否,1:是]',
  PRIMARY KEY (`id`),
  UNIQUE KEY `tag_id_2` (`tag_id`,`item_id`) USING BTREE,
  KEY `tag_id` (`tag_id`) USING BTREE,
  KEY `tag_type` (`tag_type`) USING BTREE,
  KEY `title` (`title`) USING BTREE,
  KEY `item_id` (`item_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='稿件表'
 
CREATE TABLE `weibo_log` (
  `lid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '操作记录 id',
  `name` varchar(512) NOT NULL DEFAULT '非本平台' COMMENT '平台用户名',
  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '系统用户id',
  `platform_id` int(6) unsigned NOT NULL COMMENT '平台id',
  `related_user_id` varchar(31) NOT NULL COMMENT '微博用户id',
  `parameter` text NOT NULL COMMENT '操作的参数',
  `result` text NOT NULL,
  `item_id` varchar(20) NOT NULL COMMENT '与该操作关联的微博item',
  `time` int(11) NOT NULL COMMENT '时间,时间戳格式',
  `date` int(8) NOT NULL COMMENT '用于按天分类',
  `action_id` tinyint(4) NOT NULL DEFAULT '0' COMMENT '与该操作关联的操作名id 1:删除微博,2:修改微博,3:重新发送微博,4:立即发送',
  `result_id` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态类别 1:发布成功, 2:待发送, 3:发送失败, 4:已删除',
  `ip` varchar(48) NOT NULL COMMENT '操作的IP',
  `location` varchar(128) NOT NULL COMMENT '该操作的地理信息',
  `timer_id` int(10) NOT NULL DEFAULT '0' COMMENT '定时任务的id',
  `del_name` varchar(25) DEFAULT NULL COMMENT '执行操作的人',
  `comment_count` int(10) NOT NULL DEFAULT '0' COMMENT '该条微博的评论数',
  `repost_count` int(10) NOT NULL DEFAULT '0' COMMENT '该条微博的转发数',
  `praise_count` int(10) NOT NULL DEFAULT '0' COMMENT '该条微博的点赞数',
  `editors` varchar(512) NOT NULL COMMENT '编辑 多个 逗号分隔',
  `author_departments` varchar(512) NOT NULL COMMENT '部门_微博作者 多个 逗号分隔',
  `is_crawl` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是抓取过来的,非本平台的,默认0',
  PRIMARY KEY (`lid`),
  KEY `platform_id` (`platform_id`),
  KEY `user_id` (`user_id`),
  KEY `time` (`time`),
  KEY `date` (`date`),
  KEY `result_id` (`result_id`),
  KEY `action_id` (`action_id`),
  KEY `is_crawl` (`is_crawl`),
  CONSTRAINT `weibo_log_ibfk_1` FOREIGN KEY (`platform_id`) REFERENCES `weibo_platform` (`platform_id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8 COMMENT='微博 操作记录'
 
个人经验之谈:
 
1.id: 每个表应该都有一个id   unsigned NOT NULL AUTO_INCREMENT COMMENT 'user id' 参考了下discuz中的各个表 发现他的id 一般有 int(10) mediumint(8) smallint(6) 个人偏向于习惯用int(10) 当然针对具体情况可稍作调整
 
2.name:这个字段得看需求中的name具体表示什么了,如果是用户姓名个人觉得用varchar(15)就足以了(中文),如果是用户随便输的一个标志名如nickname、filename那就设置成varchar(255),省事,免得多想,如果是固定长度的就用char吧
 
3.password:密码字段,这就得看这个密码是怎么加密的,简单的如PHP的md5加密一般就用char(32),hash加密char(48)
 
4.email:邮件字段,设计成varchar(100)差不多了,别多想
 
5.mobile:char(11)没啥说的,如果是座机就另建一个字段吧
 
6.remark: 评论字段一般就用text,还用到这个字段的比如文章内容、描述
 
7.subscribed:是否订阅,类型这样的只有两面性质的字段如sex 、is_recommend、is_super 就定义成boolean,也有根据自己的项目定义成tinyint(1)型的(0和1两个值),有超过两面性质的就用enum枚举类型的,如status(状态值)
 
8.与时间有关的比如login_time  create_time  modify_time 这样的字段,个人习惯定义成timestamp形如2016-04-06 14:18:24或者int(10)形式如1430833379,方便计算和转换
 
9.IP:个人习惯用int(15) unsigned NOT NULL  用这类定长的字段会为你带来查询上的优势,尤其是当你需要使用这样的WHERE条件:IP between ip1 and ip2
 
10.title:这种文章标题可用varchar(200)
 
11.记录时间的字段一般用int(10) 方便查询
 
注意事项:
1.当表字段设置的set类型有0这个值时在写sql语句的过程中需要把对应的整型0变换成字符串0,否则插入不成功
 
2.为常用的条件字段(where后面出现的字段)建立索引,效果特别明显
 
3.尽量使用NOT NULL 除非有一个非常特别的理由去使用NULL
 
4.两张表通过某个字段关联时(外键)因使用相同类型和形同字符集并建立索引
 
5.取值有限而固定的性别 部门 状态值 就用enum 的 【 ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串】
 
6.能用固定长度的字段就用固定长度如char int,变长的如 varchar blog text 
 
7.根据不同场景使用合适的存储引擎(可以参考这个http://www.youdiancms.com/info/348.html)
 
8.为每一个字和表写明注释,方便自己更方便他人
 
暂时只能想到这么多了,以后根据经验再补充吧~
 
更多参考:
 

mysql优化之表建设的更多相关文章

  1. MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)

    殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Ro ...

  2. MySQL优化三 表结构优化

    由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方式,也就是说,如果我们每条记录所占用的空间量减小,就会使每个page中可存放的数据行数增大 ...

  3. MYSQL优化派生表(子查询)在From语句中的

    Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能 ...

  4. MySQL优化之表结构优化的5大建议

    很多人都将 数据库设计范式 作为数据库表结构设计“圣经”,认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求殊不知,在N年前被奉为“圣经”的数据库设计 ...

  5. 3.MySQL优化---单表查询优化的一些小总结(非索引设计)

    整理自互联网.摘要: 接下来这篇是查询优化.其实,大家都知道,查询部分是远远大于增删改的,所以查询优化会花更多篇幅去讲解.本篇会先讲单表查询优化(非索引设计).然后讲多表查询优化.索引优化设计以及库表 ...

  6. mysql 优化修复表

    OPTIMIZE TABLE `table_name` 优化表 MyISAM 引擎清理碎片 OPTIMIZE语法: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABL ...

  7. 4.MySQL优化---多表查询优化

     整理自互联网 一.多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了.这图只是让大家回忆一下,各种连接查询. 然后要告诉大家的是,需要 ...

  8. Mysql优化单表查询

    借助explain分析SQL,判断该怎么建立索引. 还需要注意,有些情况会导致索引失效,用不上索引,应该优化SQL,应用上索引. 什么情况导致索引失效? 1.在索引列上做任何操作(计算.函数.类型转换 ...

  9. 单表60亿记录等大数据场景的MySQL优化和运维之道

    此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...

随机推荐

  1. javascript 网页运行代码效果

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  2. weblogic myeclipse小知识

    新建域 http://jingyan.baidu.com/article/f7ff0bfc72904e2e27bb136f.html svn 上down下来一些新项目的时候没法添加到weblogic ...

  3. [Delphi编译错误]F2084 Internal Error: U2107

    看到这个错误真是头痛,这是一个很旧的项目了,想修改下东西,清理下工程一编译出现这个该死的错误,百度了下,也没解决问题.没办法只好编译所有的BPL了.   这个项目是带包编译的,而且带了几个自己的包. ...

  4. win10使用Composer-Setup安装Composer以及使用Composer安装Yii2最新版

    1:下载 ca-bundle.crt和cacert.pem 将这两个文件放在php目录下 2:php.ini中添加上述两个文件的路径 curl.cainfo=C:/xampp/php/ca-bundl ...

  5. 大数据处理对象CLOG BLOG

    File 文件类的使用 decimal 类型(规范小数的形式)  longtext 类型(存储字符大数据) 存入文本文件到数据库 InputStream FileInputStream CLOG 类的 ...

  6. 人脸识别经典算法二:LBP方法

    与第一篇博文特征脸方法不同,LBP(Local Binary Patterns,局部二值模式)是提取局部特征作为判别依据的.LBP方法显著的优点是对光照不敏感,但是依然没有解决姿态和表情的问题.不过相 ...

  7. linux SMP启动

    SMP简介 1,硬件上,CPU没有主次之分 2,软件上,每个CPU平等动态地从进程就绪队列中调度进程加以执行,中断请求也是等概率动态的分布给某个CPU SMP启动 1,SMP结构中的CPU都是平等的, ...

  8. 精确运算--BigDecimal

    工具类 ,直接就可以使用,对于float和double的进行加减乘除长生的误差的解决办法. import java.math.BigDecimal; public class Arith { // 默 ...

  9. 让IE支持placeholder属性~

    原文:https://www.oschina.net/code/snippet_206691_26471#44160 让支持的直接路过,不支持的,完美显示~~ /*  * jQuery placeho ...

  10. Magicodes.WeiChat——自定义knockoutjs template、component实现微信自定义菜单

    本人一向比较喜欢折腾,玩了这么久的knockoutjs,总觉得不够劲,于是又开始准备折腾自己了. 最近在完善Magicodes.WeiChat微信开发框架时,发现之前做的自定义菜单这块太不给力了,而各 ...