2013-05-08 7 views
1

Firebird가 단일 테이블에 대해 중복 열을 생성하여 쿼리가 느려질 수있는 쿼리에서 잘못된 인덱스가 사용되는 것으로 나타났습니다. 아래 예를 참고하십시오.Firebird 1.5 : 테이블의 중복 열

I 동일한 열 및 인덱스 2 개 테이블을 가지고 있지만, 테이블 구조를 확인할 때 Birth_date하여 표 C와 순서 테이블을 결합하는 경우, 하나 개의 테이블은, 테이블 A가 사용하고 중복 열

Table A : Name VARCHAR(30) 
      Age INTEGER 
      BIRTH_DATE TIMESTAMP 

      Indices : Name, Birth_date (Asc), Birth_date(Desc) 

Table B : Name VARCHAR(30) 
      Age INTEGER 
      BIRTH_DATE TIMESTAMP 
      Name VARCHAR(30) 
      Age INTEGER 
      BIRTH_DATE TIMESTAMP 

      Indices : Name, Birth_date (Asc), Birth_date(Desc) 

를 도시 Birth_date 인덱스가 있지만 테이블 B는 아닙니다.

도와주세요! 이것의 원인은 무엇입니까? 고맙습니다.

+1

테이블의 실제 DDL은 무엇입니까? 동일한 이름 (대소 문자)을 가진 두 개의 열을 만들 수 없어야합니다. –

+0

@ MarkRotteveel, 그래, 한 테이블에 같은 이름을 가진 두 개의 열을 만들 수는 없지만 다른 테이블에 같은 열을 만들 수 있습니다. 문제는 동일한 열이있는 두 개의 테이블 중 하나에 중복 된 열이있는 경우입니다. DDL을 다람쥐 (IDE for Firebird)에서 볼 때. – Ianthe

+0

Jaybird의 메타 데이터 쿼리 버그 일 수도 있습니다. http://tracker.firebirdsql.org/browse/JDBC에서 문제, 재생 단계, 실제 DDL 및 사본 (또는 백업)을 설명하는 티켓을 만들 수 있습니까? 데이터베이스? –

답변

1

중복 열을 만들 수 있었던 문제가 생겼습니다. 이 요청

SELECT a.RDB$FIELD_NAME 
FROM RDB$RELATION_FIELDS a 
WHERE a.RDB$FIELD_NAME like '%COLUMN_NAME%' 

은 두 개의 COLUMN_NAME 행을 보여줍니다. 필드를 다른 곳에 붙여 넣으면 한 열에는 공백 문자가 있고 다른 행에는 캐리지 리턴 + 줄 바꿈 (CRLF)이 있고 그 뒤에 공백 문자가 있음이 분명해졌습니다.

FlameRobin 마법사를 사용하여 열을 만들었습니다. 그것에 대한 나의 생각은 복사 붙여 넣기가 사용되었고 CRLF가 삽입되었습니다. Excel 및 기타 소프트웨어를 사용하여이를 수행 할 수 있습니다. FlameRobin, FlameRobin의 드라이버와 FireBird는 각각에 대해 보호해야합니다.

우리는 열 이름에 문제가되는 CRLF가있는 일부 DDL을 작성하여 문제가되는 열을 삭제했습니다.