1、基本规则

1.1 、尽量不在数据库做运算
     运算尽可能移到程序端CPU。

1.2、 控制单表数据量

1.2.1、一年内的单表数据量预估
      >纯INT不超过1000W
      >含CHAR不超过500W

1.2.2、合理分表不超载
      > 取模
                例如:id%n=0 —> tabel0;
                           id%n=1 —> tabel1;
                           id%n=2 —> tabel2;
                                          …
      > 时间
                 例如可以根据月份、季度、年进行分表
      > 哈希
                 例如一个电商网站,需要记录用户的所有购买记录,如果将所有的记录放到
                 一张userBuy表中,势必会非常巨大,所以我们可以通过对userid进行分表处
                 理,将不同的用户购买记录放到不同的分表中,比如对userid做crc32的hash
                 计算,然后用得到的哈希值进行取余,取余的余数就是你的分表数,余数则
                 是该userid需要记录进入的表。
      > 区域
                 例如主键id范围进行分表

> 引擎.
                 可以使用Mysql的MyISAM存储引擎,因为其支持MERAGE类型,结合
                 UNION来实现数据表的分割和数据同步。这种方式的优点就是可以保留表
                 的外键、事务以及其它属性,但是缺点就是查询性能比较低,同步也不够
                 灵活
,所以大多不推荐这种方式实现分表。

1.3、遵循三大范式

> 第一范式(1NF)
                1NF是指数据库中表的每一列都是不可分割的基本数据项,同一列的数据不
                 能有多个值。如果出现重复,就可能需要定义一个新的实体(即:生成一
                 个新的表)来描述关系。
                 例如:公司中某个人员隶属于多个部门,那么在人员中,这个人部门字段
                 可以存储多个值,但是这样违反了1NF。
                 解决办法:此时可以生成一个新表,表示人员与部门的关系。

> 第二范式(2NF)
                 2NF是在1NF的基础上建立的,所以满足2NF的必须满足1NF;
                 2NF要求数据库中表的每个实例或行必须能唯一的区分。为实现区分通                             常需要为表加上一个列(主键)或多列(联合主键);
                 2NF要求实体的属性完全依赖于主键。如果存在依赖主键一部分的属性
                 那么这个属性和主键应该分离出来形成一个新的实体,新实体于原实体之间
                 是一对多的关系。简而言之,就是2NF非主属性不能部分依赖于主键。

> 第三范式(3NF)
                 3NF依赖于2NF;
                 3NF要求一个数据库表中不包含在其他表中已经存在的非主键的字段;
                 3NF表属性不能依赖其他表中非主键的属性;

1.4、拒绝3B
                     >大SQL(Big SQL)
                     >大事务(Big Transaction)
                     >大批量(Big Batch)

2、字段规则

>将字符串转化为数字:查询快、占用空间小,比如无符号INT存储IP。
                     >优先使用Enum或SET:可能值已知且有限的字符串类型。
                     >避免使用NULL字段:很难进行查询优化、NULL列加索引,需要额外的
                        空间、含NULL复合索引无效。
                     >少用并拆分TEXT/BLOB
                        Text类型处理性能远低于VARCHAR(强制生成临时表、浪费更多空间)
                     >不在数据库中存图片

3、索引规则

>谨慎合理添加索引
                        改善查询
                        减慢更新
                        能不加索引则不加索引
                     >大量重复值索引无效
                        例如:性别列
                     >不在索引列做数学或函数运算
                        无法使用索引
                        导致全表扫描
                     >尽量不用外键
                        可到达其它表意味着“锁”
                        高并发容易死锁

4、SQL优化

4.1、OR
                        · 同一字段将OR改写为IN
                        · 不同字段将OR改写为UNION
                           举例:Select * from opp where phone=‘010-88886666’ or cellPhone=
                                    ‘13800138000’;
                                      优化:
                                       Select * from opp where phone=‘010-88886666’
                                       union
                                       Select * from opp where cellPhone=‘13800138000’;

4.2、避免负向查询和%前缀查询
                              >NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等
                              >%前缀:使用不了索引、导致全表扫描。

国庆就要放假了,提前一天回家,啊啊啊啊啊啊啊,没心情写了,暂时就这些吧先,祝万千猿友假期愉快!

MySQL规范及优化相关推荐

  1. MySQL 规范及优化

    一.建库建表优化 1.核心规范(推荐) 表字符集选择UTF8 ("表情"字段单独设置为其他字符集) 存储引擎使用INNODB 不在库中存储图片.文件等 使用可变长字符串(varch ...

  2. MySQL进阶SQL优化

    MySQL进阶SQL优化 查询效率分析: 子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询.在这种情况下可以考虑用联接查询来取代. 如果要用子查询,那就用EXISTS替代IN.用NOT ...

  3. DBA很忙—MySQL的性能优化及自动化运维实践

    作者:王辰 来自:高效运维(ID:greatops) DBA的日常工作 首先,我们来看看DBA的具体工作,我觉得 DBA 真的很忙:备份和恢复.监控状态.集群搭建与扩容.数据迁移和高可用,这是我们 D ...

  4. mysql sql优化_浅谈mysql中sql优化

    说到sql优化,一般有几个步骤呢,在网上看到了一篇很不错的帖子.在这分享一下吧,也是自己学习的一个过程. 一.查找慢查询 1.1.查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; ...

  5. 【开源组件】一份值得收藏的的 MySQL 规范

    转载自  [开源组件]一份值得收藏的的 MySQL 规范 数据命名规范 所有数据库对象名称必须使用小写字母并用下划线分割. 所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询 ...

  6. MySQL的主动优化和被动优化_MySQL“被动”性能优化汇总!

    年少不知优化苦,遇坑方知优化难. --村口王大爷 本文内容导图如下: 我之前有很多文章都在讲性能优化的问题,比如下面这些: 当然,本篇也是关于性能优化的,那性能优化就应该一把梭子吗?还是要符合一些规范 ...

  7. [数据库] ------ mysql规范

    mysql规范: mysql优化的第一步,就是规范,国有国法,家有家规,一个团队在一起开发,也一定要有一套明确的规范来相互制约,下面这些规范只是作为一个互联网行业的建议,我相信一个团队最终的规范,应该 ...

  8. 完整、详细的MySQL规范

    一份非常完整.详细的MySQL规范 : https://mp.weixin.qq.com/s/eCOn8JOPqExM6XOdv16krg 一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下 ...

  9. MySQL的主动优化和被动优化_MySQL“被动”性能优化汇总

    本文内容导图如下: 我之前有很多文章都在讲性能优化的问题,比如下面这些: 当然,本篇也是关于性能优化的,那性能优化就应该一把梭子吗?还是要符合一些规范和原则呢? 所以,在开始之前(MySQL 优化), ...

最新文章

  1. Linux route
  2. 在Windows95/98中实现苹果窗口界面
  3. Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway.
  4. tensorflow log 日志级别设置
  5. linux udp 端口映射,Linux下的UDP/TCP端口映射(netcat and socat)
  6. 公众号的秘密,知道一个biz就够了
  7. docker 开启服务
  8. mysql分句执行_《Mysql 一条 SQL 语句是如何执行的?》
  9. TListView列表拒绝添加重复信息
  10. cplex的下载、安装、IDE编程及相关问题解决
  11. 我工作第五年的学习与读书之法
  12. c程序设计(谭浩强)阅读与实操 1章 (新手向)
  13. 操作系统的工作流程(流程图表示)
  14. 信息系统项目管理师和PMP对比
  15. 基于Arduino的密码+指纹智能锁(LCD1602显示器)
  16. DP转HDMI方案|DP转HDMI自带SPI|AG6311设计电路|AG6311MDQ设计参考原理图
  17. c++游戏编程初步(超简单)教学
  18. url scheme 实现跳转到小程序页面
  19. 质量小议24 -- 帕累托最优
  20. Unity使用新输入系统InputSystem制作飞机大战Demo(对象池设计模式及应用)

热门文章

  1. 参加51CTO培训,华为HCNP认证考试通过了
  2. 用unigui来制作网站
  3. 汕头大学计算机软件专业研究生就业,月薪6800:汕头大学2019毕业研究生就业,这个学院平均工资最高...
  4. 计算机管理服务无法启动,电脑依赖服务或组无法启动
  5. PHP基础-表单数据
  6. (三十七)期权的隐含波动率计算与图形
  7. 视图的隐藏显示附加Gilde加载图片模版
  8. ERP 系统维护的那些事
  9. WIFI:1.不使用第三方软件搞定WiFi热点(用代码) 2.win连接的WiFi查看密码3.同路由器限制他人网速(很多路由器软件就行,比如TP-LINK的官方软件功能就很OK,不必使用第三方软件))
  10. 青铜到王者,京东数科这个AI机器人组织有多野?