MySql高级

高级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. 存储层;

引擎区别

MySql高级_第1张图片

性能分析

  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;


    MySql高级_第2张图片
  2. select * from A left join B on A.key = B.key;


    MySql高级_第3张图片
  3. select * from A right join B on A.key = B.key;


    MySql高级_第4张图片
  4. select * from A left join B on A.key = B.kye where B.key is null;


    MySql高级_第5张图片
  5. select * from A right join B on A.key = B.key where A.key is null


    MySql高级_第6张图片
  6. select * from A full outer join B on A.key = B.key


    MySql高级_第7张图片
  7. select * from A full outer join B on A.key = B.key where A.key is null or B.key is null

    MySql高级_第8张图片

索引

  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 命令


      MySql高级_第9张图片
  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高级)