解释:当客户端连上mysql后,通过安全模块的账号权限检测,向mysql提交sql语句,这些sql语句会被mysql语句将被mysql的词法/语法解析器进行解析,生成语法树、对查询做优化,再通过相应的存储引擎获取数据,将数据返回给客户端,必要时将会将数据存储在一份QUERY CACHE中,以备下次查询使用。
query cache的目的是加速查询,系统会将查询结果在内存中做缓存,当下一次同样的查询到达时,会先从query cache中查询是否有相同记录,存在则直接返回结果,而不用进行后续操作。query cache的存储格式是”key value”,以sql语句hash出key,所以要使用query cache的首要条件是保证前后的sql查询要一致。当表的数据有变化时,相应的query cache会失效,比如增删改查数据时。另外,带有公式、函数的sql语句无法使用query cache。
两者的区别: 1. myisam不支持事务操作而innodb支持事务 2. myisam是表级锁,innodb是行级锁 3. myisam的索引文件(.myi)比较简单,由头文件和索引值两部分组成。头文件是一个结构体,用于记录索引信息(如索引数量、记录数量);myisam索引值比较简单:第一个索引值 第一个索引指针 第二个索引值 第二个索引指针…(索引指针指向数据行在MYD文件的偏移量) 。innodb是以主键顺序来组织存放表-索引来组织表。 注:innodb必须有主键。如果定义了主键则以你定义的列作为主键,若没有显示定义主键,则 1. 使用非空唯一索引,按索引定义顺序选择第一个作为主键; 2. 自动创建一个隐含主键(6字节)
答:在索引头文件中,myisam中记录了数据量count,用的时候可以取。
横向拆分的目的是减少表单的数据量,常见的增量拆分和取模的方式拆分(备注:取模方式拆分即选取相应的key,进行取模操作来划分表)。
增量拆分多用于日志类表,按日工期拆分,按记录量拆分,热表是最新的一张表
对于非数值型的key,常见的算法有:直接md5取后几位十六进制数/time33算法等,计算出一个int值再进行取余
小技巧:使用位运算的hash比%取余效率高很多。
