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

    xiaoxiao2021-03-25  110

    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比%取余效率高很多。

    转载请注明原文地址: https://ju.6miu.com/read-21187.html

    最新回复(0)