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字段。
    • 不是唯一索引的字段。
  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/gavincoder/p/14056750.html
Copyright © 2011-2022 走看看