1:对 MySQL 优化是一个综合性的技术,主要包括:
    a、标的设计合理(符合 3NF)
    b、添加适当索引(index)(普通索引、主键索引、唯一索引 unique、全文索引)
    c、分表技术(水平分隔、垂直分隔)
    d、读写(写delete/update/add)分离
    e、存储过程(模块化编程,可以提高速度)
    f、对 MySQL 配置优化(配置最大并发数,调整缓存大小)
    g、MySQL 服务器硬件升级
    h、定时的清除不需要的数据,定时进行碎片整理(myISAM)
2:什么样的表才是符合 3NF(范式)
    表的范式,是首先符合 1NF,才能满足 2NF,进一步满足 3NF。
    2.1:1NF:即表的列具有原子性,不接在分解,即列的信息粉能分解,只要数据库是关系型数据库(mysql、oracle、db2、informix、sysbase、sql sever),就自动满足 1NF。
        所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。

简而言之,第一范式就是无重复的列。
        数据库的分类:
        关系型的数据库:mysql、oracle、db2、informix、sysbase、sql sever
        非关系型数据库:特点:面向对象或者是集合
        NoSql数据库:MongoDB(特点是面向文档)
    2.2: 2NF:表中的记录是唯一的,就满足 2NF,通常我们设计一个主键来实现。

        第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

要求实体的属性完全依赖于主关键 字,简而言之,第二范式就是非主属性非部分依赖于主关键字。
主键不含业务逻辑
    2.3: 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。简而言之,第三范式就是属性不依赖于其它非主属性。
        3NF:即表中不要有冗余,就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个来存放,比如下面的表就不满足
 应当为:
    反 3NF:但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低凡是标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。
 
3:SQL 语句优化
    问题:如何从一个大项目中迅速的定位执行速度慢的语句(定位慢查询)
    ①首先我们要了解 MySQL 数据库的一些运行状态如何查询(比如想知道当前MySQL运行时间、一共运行了多少次select/update/delete。。、当前链接)
        常用 执行命令:
            show status like "uptime";        //开启了多长时间
            show status like "com_select"(come_delet\com_update);    //执行了多少次查询(删除,添加)
            show [session | global] status like ...  如果不写[session | global] 默认是session(当前)会话,指去除当前窗口的执行,如果想看所有(从MySQL启动到现在,则应该加入 global)
            show status like "connections";            //试图链接MySQL服务器的次数
            show status like "slow_queries";           //显示慢查询次数
    ②如何定位慢查询
            在默认情况下,MySQL认为 10秒才是一个慢查询
            修改 MySQL 的慢查询时间:
                a、show variables like "long_query_time"(查询默认慢查询时间)
                b、set long_query_time=1;(设置慢查询时间为一秒,重启mysql会恢复到10s)
            修改命令执行结束符:delimiter +$$(结束符)
            如果把慢查询的sql记录到我们的一个日志中,在默认情况下,我们的mysql不会记录慢查询,需要重启mysql时候,指定慢查询才行
    数据库有各种数据对象(表,存储过程,视图,函数,触发器)
            先关闭mysql在启动,如果启用了慢查询日志,默认吧这个文件放到my.ini文件中记录的位置(datadir="");
            启用慢查: --safe-mode (安全模式)
            
        
    优化问题:
        1、添加索引(全文索引/唯一索引/主键索引/普通索引)
            ①主键索引:当一张表,把某个列设为主键,则该列表就是主键索引
           如果在创建表的时候,没有指定主键索引,也可以在创建表后,再添加
                命令:alter table 表名 add primary key(列明);
                例:create table abc (id int, name varchare(32) not null default "");(无索引)
                       alter table abc add primary key (id); (添加索引)
                数据库添加索引会有一定的内存开销,在 data 中会生成三种文件:
                   
                    .frm:表示表结构
                    .MYD:表示表数据
                    .MYI:表示表索引
        2、查询索引:
             ①desc 表名【该方法的缺点:不能显示索引名】
             ②show index(es) from 表名
             ③show key from 表名 

MySQL简单优化的更多相关文章

  1. mysql简单优化思路

    mysql简单优化思路 作为开发人员,数据库知识掌握的可能不是很深入,但是一些基本的技能还是要有时间学习一下的.作为一个数据库菜鸟,厚着脸皮来总结一下 mysql 的基本的不能再基本的优化方法. 为了 ...

  2. mysql简单优化的一些总结

    mysql对cpu的利用特点: 5.1之前,多核支持较弱:5.1可利用4个核:5.5可利用24核:5.6可利用64个核:每个连接对应一个线程,每个并发query只能使用一个核 mysql对内存的利用特 ...

  3. mysql 简单优化方法

    优化步骤:1.查看SQL是否可以优化.2.查看索引是否可以优化.3.查看表结构是否可以优化. show table status from databases like 'tablename%'; / ...

  4. [mysql] 2进制安装和简单优化

    ##################################mysql 2进制安装和简单优化################################################## ...

  5. mysql的简单优化【简单易学】

    1.选取最适用的字段属性: 表字段尽量设小,不要给数据库增加没必要的空间:如:值为'01'.'02',给char(2)即可: 2.使用连接(JOIN)来代替子查询(Sub-Queries): 使用jo ...

  6. mysql之优化器、执行计划、简单优化

    mysql之优化器.执行计划.简单优化 2018-12-12 15:11 烟雨楼人 阅读(794) 评论(0) 编辑 收藏 引用连接: https://blog.csdn.net/DrDanger/a ...

  7. Mysql配置项的简单优化

    preface 众所周知,Mysql已经成为广泛使用的开源数据库了,so 公司阿里云的数据库为Mysql,在最开始的时候是直接yum安装,配置项都是默认的,没有任何调整,这次有时间就参考各路大神的资料 ...

  8. Mysql性能优化三(分表、增量备份、还原)

    接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...

  9. Mysql性能优化一

    下一篇:Mysql性能优化二 mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包 ...

随机推荐

  1. Mockito测试

    Mockito 一 mockito基本概念 Mock测试是单元测试的重要方法之一,而Mockito作为一个流行的Mock框架,简单易学,且有非常简洁的API,测试代码的可读性很高. Mock测试就是在 ...

  2. Git(一)环境搭建 + 常用命令

    上周研究了一下 Git,简单的使用了一下,个人感觉相对 SVN 来说还是有一定学习成本的,这次记录一些自己的学习过程以及常用的命令. 在学习的过程中,同事推荐了一个前辈写的教程([传送门]:Git教程 ...

  3. 微信开发第6章 通过accesstoken获取用户粉丝列表

    上一章我们讲解到open_id获取用户基本信息,那么open_id哪儿来的呢?就是粉丝列表中可以看到的.本次讲解如何获取粉丝列表. 获取粉丝列表 可以查看文档 http://mp.weixin.qq. ...

  4. 编译C++,找不到头文件(fatal error: string: No such file or directory)

    在androidproject中编译C++时,找不到头文件,报错例如以下: fatal error: string: No such file or directory 解决该问题须要在Android ...

  5. vim的全局替换

    本文出自   http://blog.csdn.net/shuangde800 本文是在学习<使用vi编辑器, Lamb & Robbins编著>时在所记的笔记. 本文内容: 基本 ...

  6. iOS中保证线程安全的几种方式与性能对比

    来源:景铭巴巴 链接:http://www.jianshu.com/p/938d68ed832c 一.前言 前段时间看了几个开源项目,发现他们保持线程同步的方式各不相同,有@synchronized. ...

  7. HDU2028JAVA

    Lowest Common Multiple Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  8. Java基础知识强化之集合框架笔记48:产生10个1~20之间的随机数(要求:随机数不能重复) 简洁版

    1. 编写一个程序,获取10个1至20的随机数,要求随机数不能重复. 分析:  A: 创建随机数对象  B: 创建一个HashSet集合  C: 判断集合的长度是不是小于10    是:就创建一个随机 ...

  9. GUI编程笔记(java)06:GUI窗体添加按钮并对按钮添加事件案例

    1.需求:把按钮添加到窗体,并对按钮添加一个点击事件. 步骤: (1)创建窗体对象(2)创建按钮对象(3)把按钮添加到窗体(4)窗体显示 2.编写程序思路: 窗体布局:窗体中组件的排列方式  布局分类 ...

  10. RHEL7单独安装图形X11

    RHEL7 默认是最小化安装(Minimal Install),没有图形界面,我们应该选择Server with GUI.若已错过此步骤,我们采用以下方式补充安装GUI界面. # yum group ...