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. liunx shell数字相加

    #!/bin/bash num1= num2= num3= #echo $($num1+$num2+$num3)#错误写法 echo $[$num1+$num2+$num3] echo $(($num ...

  2. 批处理(.bat)中使用相对路径

    批处理中使用相对路径,只需要用cd /d %~dp0代替绝对路径就可以了. ->cd /d ->%~dp0 %0为当前批处理文件 %~d0 是指批处理所在的盘符 %~dp0 是指批处理所在 ...

  3. java读取配置文件

    java 读取文件可以用字节流和字符流. 由于一个汉字占两个字节,所以如果配置文件中有汉字,用字节流读取,会出现乱码. 用字符流则不会出现乱码. 配置文件 b.properties 文件如下: fam ...

  4. 准备在新项目中使用pgsql【资源收集】

    pgsql大象数据库 是我最近在关注的一款开源数据库,可以自由修改,没那么多限制,准备在新项目中使用 postgresql中国下载站 http://www.postgres.cn/download#s ...

  5. iOS 视频播放的简单使用

    最近工作中有用到视频播放的内容,分享一些简单的用法给大家(由于网速问题,本例中使用的是本地的资源进行播放,要播放网络上的修改一些URL即可) 1.iOS9之前的视频播放 首先需要导入MediaPlay ...

  6. MySQL 使用while语句向数据表中批量插入数据

    1.创建一张数据表 mysql> create table test_while ( -> id int primary key) charset = utf8; Query OK, ro ...

  7. oracle强化练习之分组函数

    1.      显示平均工资为>2000的职位 select job,avg(sal) from emp group by job having avg(sal)>2500; 2.     ...

  8. 四种可变交流swap方法

    1.void swap(int &x, int &y){ int temp=x; x=y; y=temp; } 2.void swap(int &x, int &y){ ...

  9. 用C语言扩展Python的功能

    https://www.ibm.com/developerworks/cn/linux/l-pythc/

  10. Java基础知识强化之集合框架笔记52:Map集合之Map集合的遍历 键找值

    1. Map集合的遍历  Map -- 夫妻对 思路:  A:把所有的丈夫给集中起来.  B:遍历丈夫的集合,获取得到每一个丈夫.  C:让丈夫去找自己的妻子.  转换:  A:获取所有的键  B:遍 ...