`
ssxxjjii
  • 浏览: 932348 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据库相关规范建议

 
阅读更多

核心

  (1)不在数据库做运算cpu计算务必移至业务层

  (2)控制单表数据量:单表记录控制在1000w

  (3)控制列数量:字段数控制在20以内

  (4)平衡范式与冗余:为提高效率牺牲范式设计,冗余数据

  (5)拒绝3B:拒绝大sql,大事物,大批量

字段类

  (1)用好数值类型

       tinyint(1Byte)

       smallint(2Byte)

       mediumint(3Byte)

       int(4Byte)

       bigint(8Byte)

       bad case:int(1)/int(11)

  (2)字符转化为数字 

       用int而不是char(15)存储ip

  (3)优先使用enum或set

       例如:`sex` enum (‘F’, ‘M’)

  (4)避免使用NULL字段

       NULL字段很难查询优化

       NULL字段的索引需要额外空间

       NULL字段的复合索引无效

       bad case:

           `name` char(32) default null

           `age` int not null

       good case:

           `age` int not null default 0

  (5)少用text/blob

       varchar的性能会比text高很多

       实在避免不了blob,请拆表

  (6)不在数据库里存图片

索引类

  (1)谨慎合理使用索引

       改善查询、减慢更新

       索引一定不是越多越好(能不加就不加,要加的一定得加)

       覆盖记录条数过多不适合建索引,例如“性别”

  (2)字符字段必须建前缀索引

  (3)不在索引做列运算

       bad case:

       select id where age +1 = 10;

  (4)innodb主键推荐使用自增列

      主键建立聚簇索引

      主键不应该被修改

      字符串不应该做主键

      如果不指定主键,innodb会使用唯一且非空值索引代替

  (5)不用外键

      请由程序保证约束

sql类

  (1)sql语句尽可能简单

       一条sql只能在一个cpu运算

       大语句拆小语句,减少锁时间

       一条大sql可以堵死整个库

  (2)简单的事务

      事务时间尽可能短

      bad case:

        上传图片事务

  (3)避免使用trig/func

      触发器、函数不用

      客户端程序取而代之

  (4)不用select *

      消耗cpu,io,内存,带宽

      这种程序不具有扩展性

  (5)OR改写为IN()

      or的效率是n级别

      in的消息时log(n)级别

      in的个数建议控制在200以内

      select id from t where phone=’159′ or phone=’136′;

        =>

      select id from t where phone in (’159′, ’136′);

  (6)OR改写为UNION

       mysql的索引合并很弱智

       select id from t where phone = ’159′ or name = ‘john’;

        =>

       select id from t where phone=’159′

       union

       select id from t where name=’jonh’

  (7)避免负向%

  (8)慎用count(*)

  (9)limit高效分页

       limit越大,效率越低

       select id from t limit 10000, 10;

           =>

       select id from t where id > 10000 limit 10;

  (10)使用union all替代union

       union有去重开销

  (11)少用连接join

  (12)使用group by

       分组

       自动排序

  (13)请使用同类型比较

  (14)使用load data导数据

       load data比insert快约20倍;

  (15)打散批量更新

分享到:
评论

相关推荐

    Oracle数据库设计规范建议.pdf

    Oracle数据库设计规范建议.pdf

    Oracle数据库设计规范建议.doc

    Oracle数据库设计规范建议 1 目的 本规范的主要目的是希望规范数据库设计,尽量提前避免由于数据库设计不当而产生 的麻烦;同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很 好的保证。 ...

    数据库设计规范V.docx

    本规范的适用IT范围包括数据库对象的命名规范、设计原则、SQL语句的设计和使用、SQL语句的性能优化建议、其他与性能有关的设计原则以及设计工具的选择。 命名规范 通用规范 不同的数据库产品对对象的命名有不同的...

    MYSQL数据库设计规范.docx

    MYSQL数据库设计规范,借鉴了阿里和其他大佬,分为强制、高危、建议三个规范指标。文档后面附有参考链接

    DB2数据库使用与开发建议规范

    以分区型DB2作为数据仓库或数据集市为选型的建议使用。通过规范DB2的使用方式、开发建议来避免DB2的效率过低的问题。

    MySQL 数据库设计规范

    以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。 对于不满足【高危】和【强制】两个级别的设计,DBA 会强制打回要求修改。 2.1.1 一般命名规则 【强制】使用小写,有助于...

    数据库管理规范.doc

    数据库管理规范 版本号:V1.0 信息科 2017年4月 数据库管理规范 1 规范说明 3 2 维护管理安全规范 3 3设计规范 4 4. SQL编写规范 7 5. 数据库备份与恢复策略规范 8 6开发测试与上线安全规范 10 7 监控 10 8连接池...

    PowerDesigner设计数据库使用规范.docx

    并不是每个设计都需要用到PD,对于比较大型的项目,它是很好的,对于短平快类型的项目,例如时间要求一周左右的系统,没有必要使用,直接维护数据库即可,对于表的数量超过10个的系统,建议使用PD进行设计和交流。...

    mysql数据库设计规范

    mysql数据库设计规范,对于初级开发人员设计数据库有指导性作用,建议初级开发人员当做工具书使用

    数据库设计命名规范.docx

    注:在MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字节 建议在大 数表中含有如下字段 数据库设计命名规范全文共6页,当前为第5页。...

    数据库开发规范.zip

    sqlserver开发规范参考,SQL Server的运行性能,很大程度上依赖于所编写的SQL代码,数据库对象的设计,是否合理高效。因此开发时建议参考以下的规范,提高SQL代码的维护和执行效率。内容包含命名规范、表结构设计、...

    python php javaq dotnet ios 编码开发规范ORACLE mysql数据库设计命名规范合集(9份)

    DotNet编程规范3.5.doc iOS开发编码规范.doc Java代码规范.docx MYSQL数据库设计规范.docx ORACLE数据库命名编码规范.doc ORACLE数据库设计规范....Oracle数据库设计规范建议.doc php编码规范.docx Python开发规范.docx

    SQL2000数据库优化及安全建议.doc

    SQL2000数据库优化及安全建议

    MySQL高性能优化规范建议

    MySQL高性能优化规范建议 数据库命令规范 数据库基本设计规范 1. 所有表必须使用 Innodb 存储引擎 2. 数据库和表的字符集统一使用 UTF8 3. 所有表和字段都需要添加注释 4. 尽量控制单表数据量的大小,建议控制在 500 ...

    数据库设计开发规范v1.1.docx

    mysql 开发总结,需要注意的点,及建议。对想学习 mysql explain 的同学有一定的帮助。个人总结

    数据库设计参考规范.doc

    建议:在开发数据库之前,最好能够花一定的时间,去制定一个数据库对象的前缀 命名规范。最常用的是根据前台应用程序的模块来定义后台数据库对象前缀名。需要注 意的是,这个命名规范应该在数据库管理员与前台应用...

    SQLServer数据库设计规范.txt

    本规范建议: 1、注释以英文为主。 实际应用中,发现以中文注释的SQL语句版本在英文环境中不可用。为避免后续版本执行过程中发生某些异常错误,建议使用英文注释。 2、注释尽可能详细、全面。 创建每一数据对象前,...

    MySQL数据库设计规范1

    1.库名、表名、字段名必须使用小写字母,“_”分割 2.库名、表名、字段名必须不超过12个字符 3.库名、表名、字段名见名知意,建议使用名词而不是动词 4.建议

    数据库设计规范化的五个要求.doc

    数据库设计规范化的五个要求 通常情况下,可以从两个方面来判断数据库是否设计的比较规范。一是看看是否拥有 大量的窄表,二是宽表的数量是否足够的少。若符合这两个条件,则可以说明这个数据 库的规范化水平还是...

Global site tag (gtag.js) - Google Analytics