Oracle查询时,第一次查询很慢,第二次及以后查询速度就很快了,那后面的查询的结果集会不会不是最新的
我要查询数据库中那些表是被缓存了,导致查询时结果集不是最新的,比如:有一张表原来有10000行数据,我查询后被缓存了,后来表中数据被更新到20000,我再次查询还是从缓存...
我要查询数据库中那些表是被缓存了,导致查询时结果集不是最新的,比如:有一张表原来有10000行数据,我查询后被缓存了,后来表中数据被更新到20000,我再次查询还是从缓存中拿到的结果集,依然是10000行。
我现在怎么才能查询到,那些表被缓存了,或者查询结果被缓存了,导致我后面的查询不能得到最新的结果集。以及被缓存的行数,最新的行数是多少(或者说其他标识性的东西,可以说明缓存和实际的情况差异的) 展开
我现在怎么才能查询到,那些表被缓存了,或者查询结果被缓存了,导致我后面的查询不能得到最新的结果集。以及被缓存的行数,最新的行数是多少(或者说其他标识性的东西,可以说明缓存和实际的情况差异的) 展开
4个回答
展开全部
ORACLE 不会自动建立索引,之所以快是因为从内存中读取比disk IO要快的原因。
LZ的概念理解有误,我来举例说明下。
ORACLE data一般缓存在SGA中的data cache中 1.表A有10000条数据,在0:00时刻对其进行查询,则将表A的所有数据块从disk缓存至data cache中。因此第二次查询时直接从data cache中获得速度变快。 2.0:05时刻 对表A进行更新等操作,20000行。再次对表A进行查询,之前没有变化的数据块仍然直接从data cache中直接获得。发生过变更,或新增的数据块,需要重新从disk读入data cache中,如果data cache空间已满,就会将之前发生变更的脏数据块及不常使用的数据块清空出data cache,然后缓存新的数据块。 因此整个过程中,不会出现你说的只能查到缓存数据的现象。分析你遇到的问题,很有可能是你用userA 进行查询后发现表10000行,然后使用userB进行更新至20000行,但是userB并没有commit。因此userA在查询时仍然只能看到10000行。
LZ的概念理解有误,我来举例说明下。
ORACLE data一般缓存在SGA中的data cache中 1.表A有10000条数据,在0:00时刻对其进行查询,则将表A的所有数据块从disk缓存至data cache中。因此第二次查询时直接从data cache中获得速度变快。 2.0:05时刻 对表A进行更新等操作,20000行。再次对表A进行查询,之前没有变化的数据块仍然直接从data cache中直接获得。发生过变更,或新增的数据块,需要重新从disk读入data cache中,如果data cache空间已满,就会将之前发生变更的脏数据块及不常使用的数据块清空出data cache,然后缓存新的数据块。 因此整个过程中,不会出现你说的只能查到缓存数据的现象。分析你遇到的问题,很有可能是你用userA 进行查询后发现表10000行,然后使用userB进行更新至20000行,但是userB并没有commit。因此userA在查询时仍然只能看到10000行。
展开全部
Oracle查询时,第一次查询很慢,第二次及以后查询速度就很快了 这种情况是正常的,因为第一次查询的时候,oracle会自动建立索引,之后的查询会利用第一次建立的索引进行查询。所以后面的查询会相对快很多,尤其数据量比较大的时候,很明显。至于你说“表中数据被更新到20000,再次查询还是从缓存中拿到的结果集,依然是10000行”。这种情况出现可能性不大,建议你更新数据后一定要提交更新,commit 一下,这些数据才会真正写到库中。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一次查很慢,数据库把内容放到了缓存里,第二次查询直接去缓存里查所以会很快,为减少对磁盘的IO,所以才会有数据库缓存。客户更新数据后,缓存数据变了,数据库的数据没有变,要等dbw0这个进程将缓存数据写入磁盘。你在看看基础的书
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会的,
如果数据表在其他客户端更新了,oracle 下次查询时就不会使用缓存中的数据了。
如果数据表在其他客户端更新了,oracle 下次查询时就不会使用缓存中的数据了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询