我们正在尝试在使用 Advantage 表达式引擎的 CDX 和 ADT 表上创建索引。
到目前为止,我们尝试的代码如下所示:
CREATE INDEX IDX1 ON TBL1 (STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD));
是否可以使用 SQL 使用表达式创建索引STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD)
?
我们尝试用双引号、单引号和方括号来引用表达式。
我们正在尝试在使用 Advantage 表达式引擎的 CDX 和 ADT 表上创建索引。
到目前为止,我们尝试的代码如下所示:
CREATE INDEX IDX1 ON TBL1 (STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD));
是否可以使用 SQL 使用表达式创建索引STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD)
?
我们尝试用双引号、单引号和方括号来引用表达式。
您可以使用系统过程sp_CreateIndex
来执行此操作:
execute procedure sp_CreateIndex( 'test', null, 'idx1',
'str(empid,6)+dtos(doh)', null, 0, 0 );
骨架语法是
CREATE INDEX index_name ON table_name(column_name);
因此,要使您的代码正常工作,需要做两件事。
我认为大多数 dbms 不接受列名的表达式。但也许您可以评估表达式并提交一个有效的 SQL 字符串。
马克的回答很到位。
对于 ADT 中的表达式索引,您应该注意的一件事是,表达式中的任何空值都会使整个表达式的结果为空。这有时会导致开发人员从 CDX 切换到 ADT 出现问题,因为 ADT 表中支持 NULL 值。例如,如果 empid 或 doh 为 NULL,则上述表达式的结果将为 NULL。
需要注意的另一件事是某些表达式索引可能无法用于 SQL 优化。如果您打算主要使用 SQL 来操作数据,最好使用标准 SQL 语法创建索引:
CREATE INDEX idx1 ON test( empid, doh )
服务器将负责为 CDX 和 ADT 索引使用正确的表达式。SQL 引擎可以使用该索引来优化选择数据。