zoukankan      html  css  js  c++  java
  • MySQL数据库设计总结

    1.一般情况可以选择MyISAM存储引擎,如果需要食物支持必须使用InnoDB存储引擎。

    MyISAM 存储引擎B-tree索引有个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节。另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇索引有序排列的,主键是默认的聚簇索引,因此MyISAM虽然在一般情况下,查询性能比InnoDB高,但InnoDB的以主键为条件的查询性能是非常高的。

    2.命名规则

    数据库和表名应尽可能和所服务的业务模块名一致。

    服务与同一个子模块的一类表应尽量以子模块名。

    表名应尽量包含与所存放数据对应的单词。

    字段名称应尽量保持和实际数据相对应。

    联合索引名称应尽量包含所有索引键字段名或缩写。

    约束等其他对象也应该尽可能包含所属表或其他对象的名称。

    3.数据库字段类型定义

    经常需要计算和排序等消耗CPU的字段,应该尽量选择更为迅速的字段,如 TIMESTAMP(4个字节)代替Datetime(8个字节),通过整形替代浮点型和字符型

    变长字段使用varchar,不要使用char

    对于二进制多媒体数据,流水队列数据,超大文本数据不要放在数据库字段中

    4.业务逻辑执行过程必须读到的表中必须要有初始的值。避免业务读出为负或无穷大的值导致程序失败。

    5.并不需要一定遵守凡是理论,适度的冗余,让查询尽量减少join

    6.访问频率较低的大字段拆分出数据表。有些大字段占用空间多,访问频率较其他字段明显要少得很多,这种情况进行拆分,频繁的查询中就不需要读取大字段,造成IO资源的浪费。

    7.大表可以考虑水平拆分。大表影响查询效率,根据业务特性有很多拆分方式,根据时间递增的数据,可以根据时间来分。以id划分的数据,可以根据 id % 数据库个数的方式来拆分。

    数据库索引

    8.业务需要的相关索引是根据实际的设计所构造sql语句的where条件来确定,业务不需要的不要建索引,不允许在联合索引中存在多余的字段。特别是该字段根本不会再条件语句中出现。

    9.唯一确定一条记录的一个字段或多个字段要建立主键或唯一索引,不能唯一确定一条记录,为了提高查询效率建普通索引。

    10.业务使用的表,有些记录数很少,甚至只有一条记录,为了约束的需要,也要建立索引或者设置主键。

    11.对于取值不能重复,经常作为查询条件的字段,应该建唯一索引,并且将查询条件中该字段的条件置于第一个位置。没有必要再建立与该字段有关的联合索引。

    12.对于经常查询的字段,其值不唯一,应考虑建立普通索引,查询语句中该字段条件置于第一个位置,对联合索引处理的方法相同。

    13.业务通过不唯一索引访问数据时,需要考虑通过该索引值返回的记录稠密度,原则上可能的稠密度最大不能高于0.2,如果稠密度太大,则不合适建立索引。

    14.需要联合索引的数据库要注意索引的顺序。SQL语句中的匹配条件也要跟索引的顺序保持一致。

    15.表中的多个字段查询作为查询条件,不含有其他索引,并且字段联合值不重复,可以在这多个字段上建唯一的联合索引。

    16.重要业务访问数据表时。但不能通过索引访问数据时,应该确保顺序访问的记录数目是有限的,原则上不得多于10。

    查询语句与应用系统优化

    17.合理构造Query语句

    insert语句中,根据测试,批量一次插入1000条时效率最高,多于1000条时,要拆分,多次进行同样的插入,应该合并批量进行。

    查询条件中各种逻辑操作符性能顺序是and,or ,in 因此在查询中应该尽量避免使用在大集合中使用 in

    永远用小结果集驱动大记录集,因为在mysql中,join是通过嵌套循环来实现的。

    只取需要的columns,尽量不要使用select *。

    仅仅使用最有效的过滤字段,where字句中的过滤条件少为好。

    尽量避免复杂的join和子查询。

    18.应用系统的优化

    合理使用cache,对于变化较少的部分活跃数据通过应用层的cache缓存到内存中,对性能的提升是成数量级的。

    对重复执行相同的query进行合并,减少IO次数。

    事务相关性最小原则。

  • 相关阅读:
    解读dbcp自动重连那些事
    dbcp重连问题排查
    Redis 历史版本下载URL
    jackson 完整Jar包
    Linux缺少动态连接库.so--cannot open shared object file: No such file or directory
    多模匹配--历程
    利用poi操作word文档
    Java word 内容读取
    光纤存储和服务器架构总结
    FastDFS和集中存储方式对比
  • 原文地址:https://www.cnblogs.com/zacky31/p/8658650.html
Copyright © 2011-2022 走看看