简介:
mysql通过查询缓存优化来优化查询效率,当执行相同的一条sql时,mysql会将数据缓存起来以供下次查询使用。
查询缓存在mysql中需要手动开启。通过set session query_cache_type=on进行开启。同理,如需关闭,只需要将该参数设置为off即可。
同时,当开启了查询缓存之后,还需设置数据库分配给缓存空间的大小,默认值为0。即缓存不生效。通过 set @@global.query_cache_size=具体值进行设置。 如需永久生效,则修改my.cnf文件,添加query_cache_size=具体值
对于查询缓存的使用,在实际工作中需要关注表的特性。如果说当前表中数据会经常发生改变的话,则不建议开启查询缓存,因为当表数据被改变之后,查询缓存中的相关数据就会被清空。因为查询缓存适合使用在会被频繁查询但基本不会被改变的表。
提高缓存命中率:
1)保证客户端与服务端编码一致。如果两端编码不一致可能会导致数据不会被缓存。
2)sql语句的编写虽然本身是不区分大小写的。但对于缓存来讲,相同但大小写不同的sql会被当作两条语句。
3)当sql中包含用户自定义函数、自定义变量、存储函数、临时表这些由不同用户执行,会产生不同结果的查询,查询缓存不会对结果进行缓存。
4)通过分区表提升缓存命中率。日常工作中,我们经常会碰到一个场景,对于一张表中某个时间段会频繁更新,但是其他时间段会频繁查询。如对该表采用查询缓存,则当表中数据发生更新,就会清空查询缓存。对于这种情况可以采用分区表。把频繁查询的时间段数据放入一个分区表中,以此提高命中率。
查询缓存的利弊:
查询缓存虽然能够提升查询效率,但是也会造成一定的系统资源损耗。首先,mysql在查询的时候,首先会在查询缓存中判断当前是否存在相同的结果。其次,在进行查询的时候,如果缓存中没有相同的查询结果,会将结果先放入缓存。最后,如果表发生数据修改,查询缓存会被会将相应的结果进行删除。
查询缓存优化:
1)尽量使用多张小表。
2)写操作尽量一次性写入,否则会造成查询缓存产生数据清理。
3)尽量对sql或某个连接设置是否使用查询缓存。
4)如果当前应用存在大量数据更新,则最好不要开启查询缓存。