1

我有一个简单的 SQL 查询:

select * from recent_cases where user_id=1000000 and case_id=10095;

在 Oracle 中执行它最多需要 0.4 秒。当我连续执行 20 个请求时,需要 > 10 秒。

表“recent_cases”有 4 列:ID、USER_ID、CASE_ID 和 VISITED_DATE。目前该表中只有 38 条记录。

此外,该表上有 3 个索引:ID 列、USER_ID 列和 (USER_ID, CASE_ID) 列对。

有任何想法吗?

4

2 回答 2

3

一种理论——表有一个非常大的数据段和接近末尾的高水位线,但统计数据并没有提示优化器使用索引。因此,您将进行缓慢的全表扫描。您可以 ALTER TABLE ... MOVE 并重建索引来解决这样的问题,或者 COALESCE 它。

于 2013-08-15T14:25:43.693 回答
0

Oracle 数据库有一个称为“分析表”的功能。即使表中只有几行,此函数也可以大大加快 select 语句的速度。

以下是一些可能对您有所帮助的链接:

http://www.dba-oracle.com/t_oracle_analyze_table.htm

http://docs.oracle.com/cd/B28359_01/server.111/b28310/general002.htm

于 2013-08-15T14:44:33.393 回答