口试—MySQL

打印 上一主题 下一主题

主题 553|帖子 553|积分 1659

目次
多表查询
变乱
存储引擎
索引结构
索引分类
SQL性能优化
索引失效
视图
存储过程
触发器
MySQL锁
全局锁
表锁
行锁

多表查询

分类

  • 内连接
    只返回两个表符合条件的数据,干系联的数据(两个表的交集)
  • 外连接

    • 左外连接以左表为基础,返回左表的数据以及右表中匹配的数据,如果查询不到右边数据,将列数据填为NULL
    左外连接,查询左表的数据以及交集数据
    右外连接,查询右表的数据以及交集数据

  • 自连接
    将一个表看作两个表举行连接操纵,可以是内连接也可以是外连接
团结查询
将查询效果合并成起来,查询的语句必须表字段一致
子查询
将查询的效果作为条件再次查询,嵌套查询
变乱



  • 变乱的四大特性

  • 原子性,变乱中的指令必须全部成功或者全部失败
  • 隔离性,变乱具有隔离性,实行变乱不会被其他指令干扰
  • 一致性,变乱完成后,数据必须包管一致
  • 长期性,变乱一旦提交或者回滚,数据就会永久性发生变化


  • 并发变乱

  • 脏读,一个变乱读取到了另一个变乱还未提交更新的数据
  • 不可重复读,一个变乱先后读取同一个数据,数据不一致(另一个变乱对数据举行了更新)
  • 幻读,一个变乱先查询数据发现不存在,但是在插入时数据已经存在(另一个变乱先举行了插入)


  • 变乱的隔离级别

  • 读未提交(Read uncommitted),变乱会读取到其他变乱还未提交的数据,可能会造成
    脏读(变乱A读取到变乱B还未提交更新的数据,或变乱B回滚数据,变乱A读取到是错误数据)
    不可重复读
    幻读
  • 读提交(Read committed),变乱先后读取同一数据,数据可能不一致,可能造成
    不可重复读(变乱A读取数据,一段时间后再次读取,但是变乱B已经对数据举行了更新,此时变乱A两次读取的数据不一样
    幻读(变乱A想要实行插入数据,先去查询这个数据是否存在,查询到不存在,实行插入操纵。但是变乱B此时插入了这个数据,变乱A无法在插入)
  • 可重复读(Repeatable Read)(默认)
    MySQL默认隔离级别
    变乱在先后读取数据,得到的数据是一致的,但是存在幻读题目
  • 串行化(Serializable)
    最高隔离机制,变乱不会受其他变乱影响,按次序实行变乱。变乱必须期待前一个变乱实行完毕
存储引擎



  • MySQL体系结构
    连接层,当客户端发送连接请求时,举行连接处理(建立连接)
    服务层,存储最近查询的语句和效果,存入到数据缓存中。对SQL语句举行分析
    引擎层,负责数据的存储和处理
    存储层,磁盘IO操纵,将数据存储到磁盘中
  • MySQL中的存储引擎

    • InnoDB(Mysql默认引擎)

      • 支持变乱,支持行锁,支持外键
      • 利用B+树索引结构
      • 存储逻辑分为:表空间>段>区(64个页)>页(索引中存放数据和指针 16K)>行(行数据)

    • MyISAM

      • 不支持变乱,不支持行锁,不支持外键,访问速度快,主要以读取数据和写入数据为主,很少对数据举行删除和修改
      MyISAM的索引和数据分开存储在不同的文件中,数据按插入次序分列,次序读取时访问速度快
      底层是B+树的索引结构,通过索引查找数据时更高效
      不支持变乱,不消处理复杂的变乱管理
      只支持表级锁,写入操纵时会锁定整个表

    • Memory

      • 内存存放是Hash索引,数据生存在内存中,访问速度快,常用于临时表和缓存


索引结构

索引结构主要是B+树索引和Hash索引

  • 当树为二叉树时,次序插入会形成一个链表,查询服从低
  • 红黑树时,层级较深,检索速度慢
  • B树的插入、检索服从都高
    以5阶为例,当一个页中存满4个元素时,插入元素会将这5个元素中的中间元素向上分裂。直到上面的页也存满,继承分裂
  • B+树,基于B树,但叶子节点存放数据(单向链表),而非叶子节点只是起到一个索引数据的作用
    B树的页中存放的是数据和指针,而B+树只在叶子节点存放数据,在相同数据量下,层级比B+树高,检索的服从不如B+树
  • 而InnoDB采用的就是B+树,同时对B+树的叶子节点举行优化,由单向链表优化为双向链表


  • Hash索引
    将键值对通过哈希函数盘算出哈希值,映射到Hash表的槽位上
    如果出现哈希冲突,利用链地址法,插入链表末了

    • 当根据一个字段查找时,会先盘算这个字段的哈希值,根据哈希值找到哈希表中对应数据的位置
    • 查找服从比B+树高,但是只能用于对等比较(=,in),不能范围查询(between,<,>)

索引分类


  • 主键索引,针对字段中的主键
  • 唯一索引,避免字段中的数据重复
  • 常规索引,快速定位特点数据
  • 全文索引,查找文本中的关键字


  • 在InnoDB中,主要是

  • 聚集索引,主要是对主键,叶子节点存放的是行数据
  • 二级索引,将数据和索引分开存储,叶子节点关联的是行的主键
  • 再查找时,利用回表查询,如果根据二级索引区查找,会先查找叶子节点,对应的主键值,在举行对聚集索引根据主键值举行查找行数据
SQL性能优化


  • SQL实行频率
    show global status like 'Com_______;'
    可以查看数据库的增编削察访问频次
  • 慢查询日志
    在mysql的配置文件中开启慢查询日志,设置慢日志时间
    当sql语句实行时间超过慢日志时间就会被记录
  • profile详情
    show profile可以查看每条SQL的耗时基本环境
  • explain实行筹划(常用)
    在sql语句前加explain关键字,可以查看sql语句可能用到的索引、实际用的索引等信息
索引失效


  • 查询不依照最左前缀法则
    创建的团结索引,在查询时必须包管最左边的字段被查询
    在团结索引中,从哪个字段断开,索引就从哪开始失效
  • 范围查询
    在团结索引中,出现了范围查询,则范围右侧的列索引失效
  • 索引列运行
    在索引列上举行运算操纵,索引会失效
  • 含糊查询
    如果是尾部含糊查询,则不会失效(软件%)
    如果是头部含糊查询,则索引失效(%工程)
  • or连接的条件
    or连接的两个条件,如果是索引列和非索引列,则索引全部都失效
  • 数据分布影响
    如果全表扫描的服从更好,则索引也会失效
视图



  • 视图是一个虚拟存在的表,基于一个表或多个表的查询效果创建,可以将复杂的查询语句封装到一个视图中(将查询多张表的复杂语句),用户只需对视图简单查询就可以得到效果(无需每次编写复杂语句)
  • 可以限制用户对敏感的数据举行访问,限制用户查看的权限
  • 如果底层的表的结构发送变化(字段、数据范例),只要视图可以正确的获取数据,就可以不对视图修改
存储过程



  • 存储过程是一组实行特点功能的SQL语句集,经过编译后存储在数据库中
  • 存储过程在数据库服务器上实行,客户端只需发送实行存储过程的请求就行,不需要发送大量SQL语句
  • 将复杂的业务逻辑写入存储过程中,业务逻辑发生变化,只需对存储过程修改,不需要修改多个地方的SQL语句
  • 存储过程相称于一个方法
触发器



  • 触发器是针对特点的数据库表
  • 变乱触发时对表的增编削操纵
  • 可以在触发器触发之前或者之后,实行一些操纵(一组SQL语句)
MySQL锁

全局锁



  • 对整个数据库加锁,锁定数据库中所有的表,加锁后整个数据库都是只读状态
表锁



  • 对整个表举行加锁,分为表共享锁和表独占锁

  • 表共享锁(read lock)
    加锁后,其他变乱不可以对表实行写入操纵,只能读取
  • 表独占锁(write lock)
    加锁后,其他变乱不可以多表实行写入和读取操纵,相称于阻塞其他变乱
行锁



  • 对表中的一行数据加锁
  • 当一个变乱对一行数据加共享锁时,其他变乱可以对这行数据加共享锁,不可以加排他锁。表示多个变乱可以对一行数据举行读取,不能修改
  • 当一个变乱对一行数据加排他锁时,其他变乱可以对这行数据不可以加共享锁,也不可以加排他锁。表示一行数据只能由一个变乱修改,其他变乱只能等锁开释才能举行操纵

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表