zoukankan      html  css  js  c++  java
  • 《MySQL慢查询优化》之数据库表结构优化

    1、前言  

      慢查询优化方式通常分为四个层次(如下),换句话说,也是这四个维度影响着慢查询,因此也是我们优化SQL的方向。

    • 服务器硬件升级优化

    • Mysql服务器软件优化

    • 数据库表结构优化

    • SQL语句及索引优化

    本文重点关注于数据库表结构优化方式,关于其他优化方式以及索引原理等,请关注本人《MySQL慢查询优化》系列博文。

    2、数据库三大范式

      数据库的设计范式是指关系型数据库设计所需满足的规范,满足这些规范的数据库结构清晰、冗余较少,维护更加方便。
    目前,关系型数据库设计范式有六种:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
    其中,我们常用的有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF),简称三大范式。

    • 第一范式(1NF):列不可分割

    每一列属性都是不可再分的属性,确保每一列的原子性。

    • 第二范式(2NF)属性完全依赖于主键

    第二范式(2NF)是在第一范式(1NF)基础上建立的,即满足第二范式(2NF)前提必须先满足第一范式(1NF)。

    要求表中只具有一个业务主键,其他非主键列必须完全依赖于主键列,而不能只与主键的某一部分列相关(主要针对联合主键而言)。

    • 第三范式(3NF)属性不依赖于其它非主属性,属性直接依赖于主键

    在满足第二范式基础上,每一个非主键属性既不部分依赖于也不传递依赖于业务主键。

    总结:

      三大范式重点在考虑数据库结构合理性以及减少数据冗余方面。也就是说,友好支持数据库的增删改操作,但是没有照顾数据库查询操作。

    3、查询表结构优化

      通常,数据库设计会考虑需求、性能以及表结构三方面,其中,需求>性能>表结构。因此,需要根据实际业务场景以及性能要求设计合理的表结构,而不是严格遵守“三大范式”。另外,从查询性能上讲:单表查询>关联查询>子查询(嵌套中间表)。所以,常见的查询表结构优化方式有“反范式设计”。

    所谓反范式设计,就是根据性能和读取效率的考虑,适当的违背数据库设计三大范式,允许存在少量的数据冗余,以空间换取时间,从而提高查询性能。

    反范式设计规范:

      字段允许适当冗余,避免关联查询,以提高查询性能,但必须考虑数据一致性。冗余字段必须遵循:

    • 不是频繁修改的字段。
    • 不是varchar超长字段,更不能是text字段。
    • 不是唯一索引的字段。
  • 相关阅读:
    JavaScript继承详解 转
    Chinese Consumer and Websites
    【转载】C#防SQL注入过滤危险字符信息
    记一次在数据库中查询:“包含”或者“仅包含”某些商品的订单的方法
    IE 6 position: relative + li 问题
    【转】c# 位操作
    基于asp.net MVC的无刷新文件上传
    C++ 类继承内存布局
    美杜杉 主动防御最新版
    [转]COM 连接点
  • 原文地址:https://www.cnblogs.com/gavincoder/p/14056750.html
Copyright © 2011-2022 走看看