【发布时间】:2014-10-28 16:21:59
【问题描述】:
我正在尝试基于具有高成本 (Oracle) 的谓词创建基于函数的索引。
我想在 A4ORDERS 表中的 TIME_ID 列上创建一个索引,以返回 12 月份的值:
SELECT * FROM A4ORDERS WHERE TRIM(TO_CHAR(time_id, 'Month')) in ( 'December' );
创建 FBI:
CREATE INDEX TIME_FIDX ON A4ORDERS(TRIM(TO_CHAR(time_id, 'Month')) in ( 'December' ));
我收到“缺少右括号”错误,但我不知道为什么?您可以提供的任何指导将不胜感激。
来自 Alex Poole 的以下回复的解决方案:
CREATE INDEX TIME_FIDX ON A4ORDERS (TRIM(TO_CHAR(time_id, 'Month')));
【问题讨论】:
-
索引不会“带回值”。您是否只想对 12 月的值进行索引?
-
是的,请。我该如何做到这一点?
-
我认为您应该解释您要完成的工作。例如,您要优化什么查询?
-
您的评论让我进一步了解了这一点。我正在做的是试图让索引返回一个值。我做了一些改动,现在它可以工作了。
-
@ShoSom - 索引仍然没有返回值;您正在尝试索引从列值生成的值。我有点理解你的意思,但是当你试图解释一个问题时,术语很重要 *8-)
标签: sql oracle function indexing