我的查询目前正在运行10 secs
个时间(大约300行)。现在我在下面的查询中添加where条件table_a.column_a ='XXX'
。现在运行它所花费的时间已增加到300 secs
。
当我执行解释计划时。我看到这个新的where
条件有一些影响,看起来像一个排序操作(下面的计划结果)。我没有在sql的任何地方提及排序。为什么这件作品如此重要?
QUERY:
SELECT * from TABLE_A,TABLE_B WHERE TABLE_A.ID = TABLE_B.SOMEID AND TABLE_A.COLUMN_A='XXX';
EXPLAINPLAN结果:(删除了不必要的部分)
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 2878 | 154 (2)| 00:00:02 |
--removed lines here--
| 124 | BUFFER SORT | | 1 | 24 | 126 (1)| 00:00:02 |
| 125 | TABLE ACCESS BY INDEX ROWID | TABLE_A | 1 | 24 | 3 (0)| 00:00:01 |
|*126 | INDEX RANGE SCAN | COLUMN_A | 1 | | 2 (0)| 00:00:01 |
答案 0 :(得分:1)
看起来排序操作适用于允许对where where条件进行索引扫描,而不是通常更昂贵的顺序扫描。在这种情况下,排序加索引扫描可能比顺序扫描更昂贵。您可以尝试通过删除操作索引或使用提示来指示访问方法来更改此行为。