zoukankan      html  css  js  c++  java
  • mysql数据库优化之表的设计和慢查询定位

    一、数据库优化包含的方面
    数据库优化是一种综合性的技术。并非通过某一种方式让数据库效率提高非常多。而是通过多方面的提高。从而使得数据库性能提高。


    主要包含:
    1、表的设计合理化(3范式)
    2、给表加入合适的索引。怎样使用索引
    3、分表技术(水平切割、垂直切割)
    4、定时清除数据垃圾,定时碎片整理
    5、多用存储过程和触发器
    6、对mysql配置进行优化
    7、读写分离
    8、mysqlserver硬件升级。


    二、数据库的设计
    步骤:
    1、收集信息:与该系统有关人员进行交流。充分了解数据库须要完毕的任务
     
    2、标识实体:详细存在的对象,名词。
    比方:用户、帖子、回帖、板块

    3、标识属性


    4、标识关系:
      1)一对一:两个表的主键是公共字段
      2)一对多:主键和非主键建关系
      3)多对一:非主键和主键建关系
      4)多对多:非主键和非主键建关系
    5、将E-R图转成表
      1)将实体转成表,将属性转成字段
      2)假设找不到一个合适的字段做主键,我们加入一个自己主动增长列做主键。
      3)建立正确的关系


    三、数据规范化


    表设计出来以后,并非最合理的结构。我们须要对表进行规范化(我们通过3范式来对表进行规范化)
    先满足第一范式--再满足第二范式--再满足第三范式


    1NF: 确保每列的原子性
         第一范式用来规范化全部的字段,全部的字段都不可再分

    注意:比方地址这个字段。假设不分类汇总、不排序。只起一个字符串的作用。这时我们不拆(反3范式)


    2NF: 非键字段必须依赖于主键字段

    假设一个关系满足1NF,而且除了主键以外其它列都依赖于该主键,则满足第二范式(2NF)


    3NF: 消除传递依赖

    在非主键字段中。假设一个字段能够推导还有一个字段,这就叫传递依赖。


    四、规范化和性能的关系

    1、为了满足某种商业目标。数据库性能比规范化数据库更重要

    通过对给定的表中加入额外的字段,以大量降低须要从中搜索信息所须要的时间。

    通过在给定的表中插入计算列(比方成绩总分),以方便查询

    2、进行规范化的同一时候须要考虑数据库的性能


    五、定位慢查询

    找出查询速度较慢的SQL语句。

    增、删、改、查

    当中查询占90%,增删改共占10%

    Mysql数据库一些关于状态的查询

    用"show status"           

    指令                                                                  说明

    show status                                                   查询mysql数据库的一些执行状态

    show status like 'com_insert';                    显示运行了多少次插入操作

    show status like 'com_update';                 显示运行了多少次更新操作

    show status like 'com_delete';                    显示运行了多少次删除操作

    show status like 'com_select';                    显示运行了多少次查询操作

    show status like 'uptime';                             显示mysql启动了多长时间,假设时间非常长了,数据库表的存储引擎有的是myisam,这时候注意要碎片整理。



    show [session | global ] status like...,假设不写,默认是会话级(session),想要查询从mysql启动一直到如今,用global。


    显示慢查询

    show variables like 'long_query_time'         显示慢查询的时间,默认是10秒

    set long_query_time=0.5                               把慢查询的时间设置为0.5秒,以便于測试

    show status like 'slow_queries'         显示慢查询的时间,默认是10秒


    定位慢查询(开启慢查询日志)

    一旦开启慢查询日志以后。日志文件的位置在my.ini文件里去查找,默认情况下mysql不会记录慢查询


    怎样开启慢查询:

    1、关闭当前mysql服务:net stop mysql

    2、通过安全模式启动就会写日志。

    3、关闭安全模式启动的mysql

    4、把慢查询的时间设置为0.5秒,set long_query_time=0.5       

    5、select * from table where xx='00' ;

    6、到慢查询日志中去找相应的SQL语句。


    反三范式:

    范式越高。数据冗余就越少,可是有时就效率就越低下,为了提高执行效率,能够适当的让数据冗余。









  • 相关阅读:
    WPF 使用 Direct2D1 画图 绘制基本图形
    WPF 使用 Direct2D1 画图 绘制基本图形
    dot net core 使用 IPC 进程通信
    dot net core 使用 IPC 进程通信
    win2d 图片水印
    win2d 图片水印
    Java实现 LeetCode 240 搜索二维矩阵 II(二)
    PHP closedir() 函数
    PHP chroot() 函数
    PHP chdir() 函数
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6883930.html
Copyright © 2011-2022 走看看