mysql-查询解析,MYISAM、INNODB引擎

mysql的若干个子系统

  • 网络连接&网络通讯协议:主要负责网络通讯连接
  • 线程、进程、内存分配:管理mysql线程、内存分配
  • 查询解析&查询优化:查询解析优化
  • 存储引擎接口:统一的存储引擎调用接口
  • 各类存储引擎:各种存储引擎
  • 安全管理:名如其意
  • 日志:名如其意

mysql连接到查询数据库并返回数据的整个流程如下

这里写图片描述

解释:当客户端连上mysql后,通过安全模块的账号权限检测,向mysql提交sql语句,这些sql语句会被mysql语句将被mysql的词法/语法解析器进行解析,生成语法树、对查询做优化,再通过相应的存储引擎获取数据,将数据返回给客户端,必要时将会将数据存储在一份QUERY CACHE中,以备下次查询使用。

QUERY CACHE

query cache的目的是加速查询,系统会将查询结果在内存中做缓存,当下一次同样的查询到达时,会先从query cache中查询是否有相同记录,存在则直接返回结果,而不用进行后续操作。query cache的存储格式是”key value”,以sql语句hash出key,所以要使用query cache的首要条件是保证前后的sql查询要一致。当表的数据有变化时,相应的query cache会失效,比如增删改查数据时。另外,带有公式、函数的sql语句无法使用query cache。

sql的两个常用引擎:myisam和innodb

两者的区别:
1. myisam不支持事务操作而innodb支持事务
2. myisam是表级锁,innodb是行级锁
3. myisam的索引文件(.myi)比较简单,由头文件和索引值两部分组成。头文件是一个结构体,用于记录索引信息(如索引数量、记录数量);myisam索引值比较简单:第一个索引值 第一个索引指针 第二个索引值 第二个索引指针…(索引指针指向数据行在MYD文件的偏移量) 。innodb是以主键顺序来组织存放表-索引来组织表。
注:innodb必须有主键。如果定义了主键则以你定义的列作为主键,若没有显示定义主键,则
1. 使用非空唯一索引,按索引定义顺序选择第一个作为主键;
2. 自动创建一个隐含主键(6字节)

innodb的关键特性

  • 插入缓存——用于提高插入速度(插入缓存的数据使用必须满足以下两个条件:a索引是辅助索引 b索引不唯一)
  • 双写——增加可靠性
  • 自适应的hash索引,以增加查询效率

面试题:select count为什么myisam比innodb快?

答:在索引头文件中,myisam中记录了数据量count,用的时候可以取。

常见的分分表方式

横向拆分

横向拆分的目的是减少表单的数据量,常见的增量拆分和取模的方式拆分(备注:取模方式拆分即选取相应的key,进行取模操作来划分表)。

增量拆分

增量拆分多用于日志类表,按日工期拆分,按记录量拆分,热表是最新的一张表

对于非数值型的key,常见的算法有:直接md5取后几位十六进制数/time33算法等,计算出一个int值再进行取余

小技巧:使用位运算的hash比%取余效率高很多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值