记得有点印象好象MYSQL视图中有缓存的功能?
有人用过吗?

解决方案 »

  1.   

    查询缓存为了 mysqld 添加了几个 MySQL 系统变量,它可以在配置文件中被设置,或在启动 mysqld 时的命令行上设置。 
    query_cache_limit 不缓存大于这个值的结果。(缺省为 1M) query_cache_min_res_unit 这个变量从 4.1 被引进。 查询的结果 (已被传送到客户端的数据) 在结果检索期间被存储到查询缓存中。因而,数据不会以一个大块地处理。查询缓存在需要时分配块用于处理这个数据,所以当一个块被填充后,一个新的块被分配。甚为内存分配操作是昂贵的,查询缓存以最小的尺寸 query_cache_min_res_unit 分配块。当一个查询执行完成,最后的结果块被修整到实际数据的尺寸大小,以便未使用的内存被释放。 query_cache_min_res_unit 的缺省值为 4 KB,在大多数据情况下已够用了。 如果你有许多查询返回一个较小的结果,缺省的块尺寸可能会引起内存碎片 (显示为一个很大数量的空闲块(Qcache_free_blocks),这将引起查询缓存不得不因缺乏内存(Qcache_lowmem_prunes)而从缓存中删除查询)。在这种情况下,你应该减少 query_cache_min_res_unit。 如果你的主要查询返回的是大的结果集(查看 Qcache_total_blocks 和 Qcache_queries_in_cache),你可以通过增加 query_cache_min_res_unit 来增加性能。然而,要小心不要将它设得太大。 query_cache_size 为了存储老的查询结果而分配的内存数量 (以字节指定) 。如果设置它为 0 ,查询缓冲将被禁止(缺省值为 0 )。 query_cache_type 这个可以被设置为 (只能是数字) 选项 含义 0 (OFF, 不缓存或重新得到结果) 1 (ON, 缓存所有的结果,除了 SELECT SQL_NO_CACHE ... 查询) 2 (DEMAND, 仅缓存 SELECT SQL_CACHE ... 查询) 
    在一个线程(连接)内,查询缓存的行为可以被改变。句法如下所示: QUERY_CACHE_TYPE = OFF | ON | DEMAND QUERY_CACHE_TYPE = 0 | 1 | 2 
    选项 含义 0 or OFF 不缓存或重新得到结果 1 or ON 缓存所有的结果,除了 SELECT SQL_NO_CACHE ... 查询 2 or DEMAND 仅缓存 SELECT SQL_CACHE ... 查询 6.9.3 在 SELECT 中的查询缓存选项
    有两个可能的查询缓存相关的参数可以在一个 SELECT 查询中被指定: 
    选项 含义 SQL_CACHE 如果 QUERY_CACHE_TYPE 为 DEMAND,允许该查询被缓存。如果 QUERY_CACHE_TYPE 为 ON,这是缺省的。如果 QUERY_CACHE_TYPE 为 OFF,它不做任何事 SQL_NO_CACHE 使这个查询不被缓存,不允许这个查询被存储到高速缓存中 6.9.4 查询缓存的状态和维护
    使用 FLUSH QUERY CACHE 命令,你可以整理查询缓存,以更好的利用它的内存。这个命令不会从缓存中移除任何查询。FLUSH TABLES 会转储清除查询缓存。 RESET QUERY CACHE 使命从查询缓存中移除所有的查询结果。