在许多大中型网站时都是html页面静态化来实现访问的,为了减少数据库的访问量;但如果是实时访问数据,当数据量相对庞大时会造成数据请求访问缓慢,因此需要进行缓存数据、Mysql数据库优化以及语句优化等操作。
1、针对同一数据请求避免重复检索,减少访问mysql数据库请求
在访问相同表时尽量在同一sql中提取数据结果,减少对数据库的直接访问次数。
2、使用mysql query cache
作用:查询缓存存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到一个相同的查询,服务器从查询缓存中重新得到查询结果,而不再需要解析和执行查询。
适用范围:不发生数据更新的表。当表更改(包括表结构和表数据)后,查询缓存值的相关条目被清空。
1)执行show variables like '%query_cache%';查询语句结果如下:
have_query_cache YES query_cache_limit 1048576 query_cache_min_res_unit 4096 query_cache_size 1048576 query_cache_type OFF query_cache_wlock_invalidate OFF
各个参数含义如下:
have_query_cache表明服务器在安装使已经配置了高速缓存 query_cache_size表明缓存区大小,单位为M query_cache_type的变量值从0到2,含义分别为0或者off(缓存关闭);1或者on(缓存打开,使用sql_no_cache的select除外);2或者demand(只有带sql_cache的select语句提供高速缓存)
2)执行show status like '%Qcache%';查询语句结果如下:
Qcache_free_blocks 1 Qcache_free_memory 1031352 Qcache_hits 0 Qcache_inserts 0 Qcache_lowmem_prunes 0 Qcache_not_cached 727044 Qcache_queries_in_cache 0 Qcache_total_blocks 1
各个参数含义如下:
Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。 Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。 Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。 Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次 数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。 Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。 Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。 Qcache_queries_in_cache:当前缓存中缓存的查询数量。 Qcache_total_blocks:当前缓存的block数量。
3)执行SHOW STATUS;查询语句显示所有状态下结果,下面只是列举了部分结果:
Aborted_clients 11027 Aborted_connects 0 Binlog_cache_disk_use 0 Binlog_cache_use 0 Binlog_stmt_cache_disk_use 0 Binlog_stmt_cache_use 0 Bytes_received 1500 Bytes_sent 135210 Com_admin_commands 0 ...
3、加cache缓存层
Cache(高速缓存)、Memory(内存)、Hard disk(硬盘)都是数据存取单元,但存取速度却有很大差异,呈依次递减的顺序。对于CPU来说,它可以从距离自己最近的Cache高速地存取数据,而不是从内存和硬盘以低几个数量级的速度来存取数据。而Cache中所存储的数据,往往是CPU要反复存取的数据,有特定的机制(或程序)来保证Cache内数据的命中率(Hit Rate)。因此,CPU存取数据的速度在应用高速缓存后得到了巨大的提高。
开启MySQL的select cache,使用命令如下:
SET GLOBAL query_cache_size = 102400000;
query_cache_size默认为0时,是不开启MySQL cache功能。