zoukankan      html  css  js  c++  java
  • mysql从零开始学习(一) mysql基础

    1.0.Sql语言分类(DML、DCL、DDL)

    1.1.数据库三大特性

    1. 第一范式原子性:
      1. 第一范式是数据库的基本要求,不满足这一 点就不是关系数据库数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。

    2. 第二范式:唯一性:数据表中的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列用来存储唯一标识,这个唯一属性列被称作主键列


    3. 第三范式关联性:每列都与主键有直接关系,不存在传递依赖
    4. 拓展:字段约束

    1.2. 数据库设计规范

    1.所有数据库对像名称必须使用小写字母并用下划线分割。不同的数据库名DbNamedbname

    2.所有数据库对像名称禁止使用MySQL保留关建字例如from等等。

    3.数据库对像的命名要能做到见名识义,并且最好不要超过32个字符

    4.临时库表必须以tmp_为前缀并以日期为后缀

    5.备份库,备份表必须以bak为前缀并以日期为后缀

    6.所有存储相同数据的列名和列类型必须-

    7.所有表必须使用Innodb存储引擎:

      (1) 5.6以后的默认引擘

      (2) 支持事务,行级锁,更好的恢复性,高并发下性能更好

      (3) Mysql5.5使用之.Myisam(默认存储引擎)情况

      (4) 列无穷。空间数据可以使用其它(innodb无法满足)

    8.数据库和表的字符集统一-使用UTF8/UTF8mb4

      (1)utf8和utf8mb4区别:都是存汉字,utf8是3个字节一个汉字,utf8mb4是四个字节一个汉字,utf8mb4可以存生僻汉字和enjom表情

    9.所有表和字段都需要添加注释.

      (1) 使用comment从句添加表和列的备注

      (2) 从一开始就进行数据字典的维护

    10.尽量控制单表数据量的大小,建议控制在500万以内

      (1) 500万并不是MySQL数据库的限制

      (2) 修改表结构,备份,恢复都会有很大问题。

      (3) Mysql最多可以存储多少万数据呢?这种限制取决于存储设置和文件系统

      (4) 可以用历史数据归档,分库分表等手段来控制数据量大小

    11.谨慎使用MySQL分区表

      (1) 分区表在物理.上表现为多个文件,在逻辑上表现为一个表

      (2) 谨慎选择分区键,跨分区查询效率可能更低

      (3) 建议采用物理分表的方式管理大数据。

    12.尽量做到冷热数据分离,减小表的宽度

      (1) Mysq|l限制最多存储4096=》减少磁盘IO ,保证热数据的内存缓存命中率,利用更有效的利用缓存,避免读入无用的冷数据(SELECT * FROM )

      (2) 经常一-起使用的列放到一个表中

      (3) 禁止在表中建立预留字段

    13.禁止在表中建立预留字段

      (1) 预留字段的命名很难做到见名识义

      (2) 预留字段无法确认存储的数据类型,所以无法选择合适的类型

      (3) 对预留字段类型的修改,会对表进行锁定

      (4) 修改一个字段成本大于添加和删除。

    14.禁止在数据库中存储图片,文件等二进制数据

    15.禁止在线上做数据库压力测试

    16.禁止从开发环境,测试环境直连生产环境数据库

    1.3. 索引设计规范(防止滥用索引)

    1.限制每张表上的索引数量,建议单张表索引不超过5

      (1) 索引并不是越多越好!索引可以提高效率同样可以降低效率(优化查询、降低增加、删除)

      (2) 禁止给表中的每一列都建立单独的索引

    2.每个Innodb表必须有一个主键(主键就是一个索引)

      (1) 不使用更新频繁的列作为主键,不使用多列主键

      (2) 不使用UUID , MD5 , HASH,字符串列作为主键

      (3) 主键建议选择使用自增ID

    3.对2的补充,intuuid对比分析

      (1) Int作为主键优点

        ① 需要很小的数据存储空间,bai仅仅需要4 byte

        ② insertupdate操作时使用INT的性能比GUID好,所以使用int将会提高应用程序的性能。

        ③ indexJoin 操作,int的性能最好。

        ④ 容易记忆。

        ⑤ 支持通过函数获取最新的值,如:Scope_Indentity()

      (2) Int作为主键缺点

        ① 如果经常有合并表的操作,就可能会出现主键重复的情况。

        ② 使用INT数据范围有限制。如果存在大量的数据,可能会超出INT的取值范围。

        ③ 很难处理分布式存储的数据表。

      (3) Uuid作为主键优点

        ① 它是独一无二的。

        ② 出现重复的机会少。

        ③ 适合大量数据中的插入和更新操作。

        ④ 跨服务器数据合并非常方便。

      (4) Uud缺点

        ① 存储空间大(16 byte),因此它将会占用更多的磁盘大小。

        ② 很难记忆。join操作性能比int要低。

        ③ 没有内置的函数获取最新产生的guid主键。

        ④ GUID做主键将会添加到表上的所以其他索引中,因此会降低性能

    4.常见索引列建议

      (1) SELECTUPDATEDELETE语句的WHERE从句中的列

      (2) 包含在ORDER BYGROUP BYDISTINCT中的字段

      (3) 多表JOIN的关联列

    5.索引列的顺序

      (1) 联合索引中,索引是从左到右的顺序来使用的。

      (2) 区分度最高的列放在联合索引的最左侧

      (3) 尽量把字段长度小的列放在联合索引的最左侧

      (4) 使用最频繁的列放到联合索引的左侧

    6.避免建立冗余索引和重复索引

    7.对于频繁的查询优先考虑使用覆盖索引

      (1) 覆盖索引:就是包含了所有查询字段的索引

      (2) 避免Innodb表进行索引的二次查找

      (3) 可以把随机I0变为顺序I0加快查询效率

    8.尽量避免使用外键

      (1) 不建议使用外键约束,但一定在表与表之间的关联键上建立索引

      (2) 外键会影响父表和子表的写操作从而降低性能【外键建议在程序中判断】

  • 相关阅读:
    算法--字符串分隔符/字符串匹配算法
    VMware虚拟机磁盘收缩的几种方法
    maven学习--生命周期
    web适配问题
    eclipse按照svn插件
    一台服务器跑两个tomcat
    postgresql数据库
    visio2013破解工具
    多线程学习
    深入理解Java:SimpleDateFormat安全的时间格式化
  • 原文地址:https://www.cnblogs.com/1439107348s/p/14292042.html
Copyright © 2011-2022 走看看