加速大型表的Oracle 12c文本查询

时间:2017-02-06 18:19:46

标签: oracle12c

我有一张包含400万条记录的表格。此查询快速运行

SELECT Id
  FROM Table1
  WHERE contains(Text,'great OR good') >0 
  OFFSET 10 ROWS   FETCH NEXT 3 ROWS ONLY


----------------------------------------------------------------------------------------------
| Id  | Operation                     | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |              |     3 |   225 |  6035   (0)| 00:00:01 |
|*  1 |  VIEW                         |              |     3 |   225 |  6035   (0)| 00:00:01 |
|*  2 |   WINDOW NOSORT STOPKEY       |              | 35926 |    64M|  6035   (0)| 00:00:01 |
|   3 |    TABLE ACCESS BY INDEX ROWID| Table1       | 35926 |    64M|  6035   (0)| 00:00:01 |
|*  4 |     DOMAIN INDEX              | IDX_ADS_TEXT |       |       |  6035   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------

但是这个查询

SELECT Id
FROM Table1
WHERE contains(Text,'great OR good') >0 
ORDER BY SomeDateColumn
OFFSET 10 ROWS   FETCH NEXT 3 ROWS ONLY


------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |              | 35926 |  2947K|       | 20265   (1)| 00:00:01 |
|*  1 |  VIEW                         |              | 35926 |  2947K|       | 20265   (1)| 00:00:01 |
|*  2 |   WINDOW SORT PUSHED RANK     |              | 35926 |    64M|    70M| 20265   (1)| 00:00:01 |
|   3 |    TABLE ACCESS BY INDEX ROWID| Table1       | 35926 |    64M|       |  6035   (0)| 00:00:01 |
|*  4 |     DOMAIN INDEX              | IDX_ADS_TEXT |       |       |       |  6035   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------

跑得太慢了。我能做什么,原因是什么?我有SomeDateColumn

的索引

1 个答案:

答案 0 :(得分:2)

您可以提高性能,这是值得怀疑的。

为何与众不同?想象一下:我有一个装有400万网球的篮子。它们有不同的颜色,每个都有一个日期。

问题1:从篮子里拿球;忽略前10个蓝色或绿色,然后保持(返回)接下来的三个。

问题2:找到篮子里的所有蓝色和绿色球。按照写在它们上的日期顺序排列它们。然后忽略前10个(按日期顺序)并返回接下来的三个。

在问题1中,甚至可能只有50,000个球(甚至更少)被观察,直到其中13个为蓝色或绿色。

在问题2中,你必须查看所有400万个球,并且只保留蓝色和绿色球。然后你必须花费额外的时间来订购它们。

我希望你能明白为什么问题1可以很快解决,但问题2可能需要很长时间。