• 基础表设计的规范


    (16)禁止使用小数存储货币

    解读:使用整数吧,小数容易导致钱对不上

    (1)必须使用InnoDB存储引擎

    解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高

    (2)必须使用UTF8字符集

    解读:万国码,无需转码,无乱码风险,节省空间

    (14)必须把字段定义为NOT NULL并且提供默认值

    解读:

    a)null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化

    b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多

    c)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识

    d)对null 的处理时候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’shenjian’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录

    (25)禁止使用属性隐式转换

    解读:SELECT uid FROM t_user WHERE phone=13812345678 会导致全表扫描,而不能命中phone索引,猜猜为什么?(这个线上问题不止出现过一次)

    (26)禁止在WHERE条件的属性上使用函数或者表达式

    解读:SELECT uid FROM t_user WHERE from_unixtime(day)>='2017-02-15' 会导致全表扫描

    正确的写法是:SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-02-15 00:00:00')

    (28)禁止大表使用JOIN查询,禁止大表使用子查询

    解读:会产生临时表,消耗较多内存与CPU,极大影响数据库性能

  • 相关阅读:
    Docker学习笔记07_网络配置
    Docker学习笔记06_部署appache+tomcat+redis+mongo+python
    Docker学习笔记05_部署nginx+php+mysql+phpmyadmin
    Docker学习笔记04_镜像管理
    Docker学习笔记03_容器的简单应用
    Docker学习笔记02_基本操作
    Docker学习笔记01_CentOS 7安装Docker
    Cisco Ironport ESA配置拒收黑名单
    CentOS 7安装Cobra
    jvm内存模型、常见参数及调优
  • 原文地址:https://www.cnblogs.com/yingchen/p/6411032.html
Copyright © 2020-2023  润新知