一,MySQL高速缓存的作用
如果打开高速缓存,MYSQL会自动记录SELECT语句和返回结果,再下一次查询时,如果表没有改变,直接返回缓存。可适用于MyISAM,InnoDB等数据引擎。

二,无法被高速缓存的情况
1. 表数据被更新后,关联该表的高速缓存被清空。
2. 如果你有许多mysqld服务器更新相同的MyISAM表,在这种情况下查询缓存不起作用。
3. 高速缓存的语句区分大小写。例如SELECT * FROM tbl_name和Select * from tbl_name是不同的。
4. 如果一个查询包含下面函数中的任何一个,它不会被缓存: 

BENCHMARK() CONNECTION_ID() CURDATE()
CURRENT_DATE() CURRENT_TIME() CURRENT_TIMESTAMP()
CURTIME() DATABASE() 带一个参数的ENCRYPT()
FOUND_ROWS() GET_LOCK() LAST_INSERT_ID()
LOAD_FILE() MASTER_POS_WAIT() NOW()
RAND() RELEASE_LOCK() SYSDATE()
不带参数的UNIX_TIMESTAMP() USER()  
5. 引用自定义函数。
6. 引用自定义变量。
7. 引用mysql系统数据库中的表。
8. 下面方式中的任何一种:
SELECT ...IN SHARE MODE
SELECT ...FOR UPDATE
SELECT ...INTO OUTFILE ...
SELECT ...INTO DUMPFILE ...
SELECT * FROM ...WHERE autoincrement_col IS NULL

9. 被作为编写好的语句,即使没有使用占位符。例如,下面使用的查询:
char *my_sql_stmt = "SELECT a,b FROM table_c";
mysql_stmt_prepare(stmt,my_sql_stmt,strlen(my_sql_stmt));
10. 使用TEMPORARY表。
11. 不使用任何表。
12. 用户有某个表的列级权限。

三,控制SQL语句使用缓存和不使用缓存
SELECT SQL_CACHE id, name FROM customer;
SELECT SQL_NO_CACHE id, name FROM customer;

四,查询高速缓存配置及配置含义

have_query_cache是否开启缓存

query_cache_limit小于这个数的结果集才会被缓存

query_cache_min_res_unit缓存时的最小数据块大小

query_cache_size缓存大小

query_cache_type缓存类型

query_cache_wlock_invalidate表写锁时,无法读取缓存

 

五,显示当前高速缓存状态