美文网首页
MySql高级

MySql高级

作者: RalapHao | 来源:发表于2017-09-08 11:13 被阅读0次

    高级MySql

    1. 启动

      mysqlserver mysql start

    2. 设置root用户密码

      /usr/bin/mysqladmin -u root -p root

    3. 设置开机自启

      chkconfig mysql on

    4. 查看开机启动服务

      ntsysv

    5. 目录结构
      • mysql数据库文件的存放路径

        /var/lib/mysql/
        - 配置文件目录
        >/usr/share/mysql
        - 项目命令目录
        >/usr/bin
        - 启停脚本命令
        >/etc/init.d/mysql

    6. 查看字符集

      show variables like 'character%';
      show variables like '%char%';

    7. 修改字符集
      • [client]

        default-character-set-utf8
        - [mysqld]
        >character_set_server-utf8
        >character_set_client-utf8
        >collation-servser-utf8_general_ci
        - [mysql]
        >defalut-character-set=utf8

    MySql架构

    1. 连接层;
    2. 服务层;
    3. 引擎层;
    4. 存储层;

    引擎区别

    性能分析

    1. 性能下降,SQL变慢

    2. 执行时间长

    3. 等待时间长

      ****原因分析****

      • 查询语句写的烂
      • 索引失败
      • 关联查询太多join(设计缺陷或不得已的需求)
      • 服务器调优或各个参数设置(缓冲、线程数等)

    索引

    1. 单值索引

      为一个字段加索引
      create index idx_user_name on user(name);

    2. 复合索引

      为多个字段添加索引
      create index inde_user_nameEmail on user(name,email);

    所有JOIN情况

    1. select * from A inner join B on A.key=B.key;


    2. select * from A left join B on A.key = B.key;


    3. select * from A right join B on A.key = B.key;


    4. select * from A left join B on A.key = B.kye where B.key is null;


    5. select * from A right join B on A.key = B.key where A.key is null


    6. select * from A full outer join B on A.key = B.key


    7. select * from A full outer join B on A.key = B.key where A.key is null or B.key is null

    索引

    1. 什么是:

      索引(Index)是帮助Mysql高效获取数据的数据结构,可以的的到所以的本质:索引是数据结构。
      简单的理解为:排好序的快查找数据结构。(查找 and 排序)
      在数据之外,数据库系统还维护这满足特定查找算法的数据结构,这些数据结构以某种方式(指向)数据,这样就可以咋这些数据结构上实现高级查找算法,这种数据结构,就是索引,
      一般的索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上
      平时说的索引如果没有特殊指明,都是指B树(多路搜索树,并不一定是二叉树)

    2. 优势

      提高数据检索效率,降低数据库IO成本高;
      降低数据库的排序成本,降低CPU的消耗;

    3. 劣势

      实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引也是占用空间的
      虽然索引大大提高了查询速度,同时却会降低更新表的速度,因为更新表时,MySql不仅要保存数据,还要保存一下索引文件,
      索引只是提高效率的一个因素,如果你的MySql有大数据量的表,就需要花时间研究建立最游侠的索引,或优化查询语句;

    4. 分类
      • 单值索引

        一个索引只包含单个列,一个表可以有多个单列索引;
        - 唯一索引
        >索引列的值必须是唯一的,但允许有空值
        - 复合索引
        >一个索引包含多个列
        - 基本语法
        - 创建
        >create [unique] index indexName on mytable(colummanme)
        >alter mytable add [unique] index [indexName] on(colummanme)
        - 删除
        >drop index[indexName] on mytable
        - 查看
        >show index from table_name;
        - alter 命令


    5. mysql索引结构
      • BTree索引
      • Hash索引
      • full-text全文索引
      • R-Tree索引
    6. 那些情况创建索引
      • 主键自动建立唯一索引
      • 频繁作为查询条件的字段应该创建索引;
      • 查询中与其他表关联的字段,外键关系建立索引
      • 频繁更新的字段不适合创建索引
      • where条件中用不到的字段不适合创建索引
      • 单键/组合索引的选择问题,who?(在高并发下倾向于创建组合索引)
      • 查询中排序的字段,排序字段若通过索引去访问,将大大提升排序速度;
      • 查询中统计或分组字段
    7. 那些情况不要创建索引
      • 表记录太少;
      • 经常增删改的
      • 数据重复且分布俊宇的表字段,包含许多重复的内容,建立索引没有太大意义;

    性能分析

    1. MySql Query Optimizer(mysql内部调优)
    2. mysql常见瓶颈
      • CPU: CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。
      • IO:磁盘I/O瓶颈发生在装入数据远大于内存容量的时候;
      • 服务器的硬件性能瓶颈:top.free,iostat, vmstat来查看系统性能状态;
    3. Explain
      • 是什么(查看执行计划)

        使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySql是如何处理你的Sql语句的。分析你的查询语句或是表结构的性能瓶颈
        - 能干吗
        - 表的读取顺序
        - 数据读取操作的操作类型
        - 那些索引可以用
        - 呢些索引被实际使用
        - 表之间的引用
        - 每张表有多少行被优化器查询
        - 这么玩
        - Explain + SQL语句
        - 执行计划包含的信息
        - id
        1. id 相同,执行顺序,由上到下
        2. id 不同,如果是子查询,id的序号会递增,id值越大优先级越高,越优先被执行
        3. id 有相同有不同:id如果相同,可以认为是同一组,从上向下顺序执行;在所有组中,id值越大,优先级越高,越优先执行 衍生 = DERIVED
        - select_type
        1. simple
        >简单的select查询,查询中不包含子查询或者UNION
        2. primary
        >查询中若包含任何复杂的子部分,最外层查询则被标记为
        3. subquery
        >在select或where列表中包含了子查询
        4. derived
        >在from列表中包含的子查询被标记为derived(衍生)Mysql会递归执行这些子查询,把结果放在临时表中。
        5. union
        >若第一个select出现在UNION之后则被标记为union,若union包含在from子句的子查询中,外层select将被宝鸡微:derived
        6. union result
        >从union表中获取结果的select
        >查询的类型,主要用于区别普通查询、联合查询、子查询等复杂查询
        - table
        - type
        - possible_keys
        - key
        - key_len
        - ref
        - rows
        - Extra
        - 个字段解释
        - 热盛Case

    相关文章

      网友评论

          本文标题:MySql高级

          本文链接:https://www.haomeiwen.com/subject/ugsgjxtx.html