MySQL的缓存对象有什么?
1)只缓存SELECT语句。SHOW命令和存储程序不会被缓存。
2)不能缓存预编译语句(prepared statement)和游标。查询缓存中保存的是查询语句和结果集,而预编译语句中存在替代符和额外的参数,游标从块中读取结果,因此上述两种情况不能被缓存。
3)查询语句不能包含动态内容。多次执行某SQL,必须能够返回相同的结果集,因此查询中不能包含像UUID(), RAND(), CONNECTION_ID()这样的函数。
4)SQL中包含定义函数和自定义变量不会被缓存。
Mysql> set @id=1;
Mysql> select * from test where id=@id 像这种语句也不会缓存
5)对系统表的查询不会被缓存。
Mysql> select * from mysql.user where user=’root’
6)非自动提交(显示使用BEGIN…END)事务中的SQL不会被缓存。
7)使用TEMPORARY表的SQL不会被缓存。
8)不使用任何表的SQL不会被缓存。
Mysql> select @id;
9)在下面的SELECT操作也不会被缓存:
SELECT ...IN SHARE MODE
SELECT ...FOR UPDATE
SELECT ...INTO OUTFILE ...
SELECT ...INTO DUMPFILE ...
SELECT * FROM ...WHERE autoincrement_col IS NULL
2)不能缓存预编译语句(prepared statement)和游标。查询缓存中保存的是查询语句和结果集,而预编译语句中存在替代符和额外的参数,游标从块中读取结果,因此上述两种情况不能被缓存。
3)查询语句不能包含动态内容。多次执行某SQL,必须能够返回相同的结果集,因此查询中不能包含像UUID(), RAND(), CONNECTION_ID()这样的函数。
4)SQL中包含定义函数和自定义变量不会被缓存。
Mysql> set @id=1;
Mysql> select * from test where id=@id 像这种语句也不会缓存
5)对系统表的查询不会被缓存。
Mysql> select * from mysql.user where user=’root’
6)非自动提交(显示使用BEGIN…END)事务中的SQL不会被缓存。
7)使用TEMPORARY表的SQL不会被缓存。
8)不使用任何表的SQL不会被缓存。
Mysql> select @id;
9)在下面的SELECT操作也不会被缓存:
SELECT ...IN SHARE MODE
SELECT ...FOR UPDATE
SELECT ...INTO OUTFILE ...
SELECT ...INTO DUMPFILE ...
SELECT * FROM ...WHERE autoincrement_col IS NULL
温馨提示:答案为网友推荐,仅供参考