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
一、Session缓存(又称作事务缓存):Hibernate内置的,不能卸除。缓存范围:缓存只能被当前Session对象访问。缓存的生命周期依赖于Session的生命周期,当Session被关闭后,缓存也就结束生命周期。
Hibernate一些与一级缓存相关的 *** 作(时间点):
数据放入缓存:
1. save()。当session对象调用save()方法保存一个对象后,该对象会被放入到session的缓存中。
2. get()和load()。当session对象调用get()或load()方法从数据库取出一个对象后,该对象也会被放入到session的缓存中。
3. 使用HQL和QBC等从数据库中查询数据。
二、SessionFactory缓存(又称作应用缓存):使用第三方插件,可插拔。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)