2011-01-07 6 views
3

Advantage 식 엔진을 사용하는 CDX 및 ADT 테이블에 인덱스를 만들려고합니다.SQL을 사용하여 표현식 엔진 표현식으로 색인을 생성 할 수 있습니까?

우리가 지금까지 시도한 코드는 다음과 같습니다

CREATE INDEX IDX1 ON TBL1 (STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD)); 

는 SQL을 사용하여 표현 STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD)와 인덱스를 생성 할 수 있습니까?

큰 따옴표, 작은 따옴표 및 대괄호로 표현식을 인용 해 보았습니다.

답변

5

당신은이 작업을 수행 할 시스템 프로 시저 sp_CreateIndex를 사용할 수 있습니다

execute procedure sp_CreateIndex('test', null, 'idx1', 
      'str(empid,6)+dtos(doh)', null, 0, 0); 
1

골격 구문은

CREATE INDEX index_name ON table_name(column_name); 

그래서 두 가지 코드가 작동하는 일이 필요하다.

  1. 표현식은 기존 열의 이름으로 평가되어야합니다.
  2. dbms는 열 이름의 표현식을 받아 들여야합니다.

대부분의 dbms는 열 이름에 대한 표현식을 허용하지 않는다고 생각합니다. 하지만 아마도 표현식을 평가하고 대신 유효한 SQL 문자열을 제출할 수 있습니다.

+0

+1 내 문제에 대한 해결책은 아니지만, 왜 그런 식으로 작동하지 않는지에 대한 좋은 설명이 될 것입니다. –

1

Mark 's answer is spot.

ADT에서 식 색인에 대해 알아야 할 점 중 하나는 식의 모든 null 값이 전체 식의 결과를 null로 렌더링한다는 것입니다. ADT 테이블에서 NULL 값이 지원되므로 개발자가 CDX에서 ADT로 전환 할 때 문제가 발생할 수 있습니다. 예를 들어, 위의 표현식의 결과는 empid 또는 doh가 NULL이면 NULL입니다.

또 다른주의해야 할 점은 특정 표현식 인덱스가 SQL 최적화에 사용할 수 없다는 것입니다. 당신은 대부분의 데이터를 조작하는 SQL을 사용하려는 경우, 표준 SQL 구문을 사용하여 인덱스를 생성하는 것이 더있을 수 있습니다 :

CREATE INDEX idx1 ON test(empid, doh) 

서버는 CDX와 ADT 인덱스에 대한 올바른 표현을 사용하여 처리됩니다. 인덱스는 데이터 선택을 최적화하기 위해 SQL 엔진에서 사용할 수 있습니다.

+0

좋은 점 감사합니다. 그러나 우리의 경우에는 색인 재구성 도구를 사용하기 때문에 수식을 수동으로 지정해야합니다. –

관련 문제