2009-08-21 5 views
0

인덱스 이름에 대해 INFORMATION_SCHEMA.STATISTICS를 쿼리 할 때 이상한 결과가 나타납니다. 내가 "SELECT * ..."할 때, 나는 2 개의 인덱스를 보지만 "SELECT COUNT (*) ..."는 count (*)가 0이라고 말합니다. 이상적인 MySQL 특정 테이블에 인덱스를 얻는 더 좋은 방법이 있습니까?INFORMATION_SCHEMA.STATISTICS에서 테이블의 인덱스를 읽을 때 MySQL 행 수가 잘못되었습니다.

예 : 그러나

mysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE 
table_schema = 'mifostest' AND table_name ='CUSTOMER' AND INDEX_NAME = 
'CUSTOMER_BRANCH_SEARCH_IDX'; 
+----------+ 
| COUNT(*) | 
+----------+ 
|  0 | 
+----------+ 
1 row in set (0.00 sec) 

...

mysql> SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema = 
'mifostest' AND table_name ='CUSTOMER' AND INDEX_NAME = 
'CUSTOMER_BRANCH_SEARCH_IDX'\G 
*************************** 1. row *************************** 
TABLE_CATALOG: NULL 
TABLE_SCHEMA: mifostest 
    TABLE_NAME: CUSTOMER 
    NON_UNIQUE: 1 
INDEX_SCHEMA: mifostest 
    INDEX_NAME: CUSTOMER_BRANCH_SEARCH_IDX 
SEQ_IN_INDEX: 1 
    COLUMN_NAME: BRANCH_ID 
    COLLATION: A 
    CARDINALITY: 0 
    SUB_PART: NULL 
     PACKED: NULL 
    NULLABLE: YES 
    INDEX_TYPE: BTREE 
     COMMENT: 
*************************** 2. row *************************** 
TABLE_CATALOG: NULL 
TABLE_SCHEMA: mifostest 
    TABLE_NAME: CUSTOMER 
    NON_UNIQUE: 1 
INDEX_SCHEMA: mifostest 
    INDEX_NAME: CUSTOMER_BRANCH_SEARCH_IDX 
SEQ_IN_INDEX: 2 
    COLUMN_NAME: SEARCH_ID 
    COLLATION: A 
    CARDINALITY: 0 
    SUB_PART: NULL 
     PACKED: NULL 
    NULLABLE: YES 
    INDEX_TYPE: BTREE 
     COMMENT: 
2 rows in set (0.00 sec) 

더 많은 정보 :

  • 나는 우분투 9.04에서 MySQL 5.1.31-1ubuntu2을 사용하고 있습니다.
  • "SHOW CREATE TABLE"에 인덱스를 표시합니다.

감사합니다. -Adam

+0

5.0.45 또는 5.0.51에서이를 복제 할 수 없습니다. Steve의 답이 맞을 수도 있습니다. 아마도 MySQL 개발자에게 버그로 제출하는 것이 가장 좋습니다. – Randy

답변

2

ANSI/ISO SQL 표준은 인덱스에 관해 말할 사항이 없으므로 쿼리 할 수있는 "MySQL과 관련이없는"방법이 있는지 의심 스럽습니다. 표준의 INFORMATION_SCHEMA는 많은 기본 테이블 중 CONSTRAINTS, ASSERTIONS 및 KEY_COLUMN_USAGE를 포함하지만 인덱스에 대해서는 아무 것도 없습니다. STATISTICS조차도 제가 찾을 수있는 표준에 언급되어 있지 않습니다.

보고하는 내용이 저에게 버그와 유사합니다. SELECT *가 행을 반환하면 SELECT COUNT (*)는 0을 반환하지 않습니다. 아마도 this bug의 회귀가 있었을 것입니다.

+0

고마워, 스티브! table_name = 'customer'(소문자)는 table_name LIKE 'CUSTOMER'처럼 작동합니다. 언급 한 버그 일 수도 있고 아마도 MySQL 버그 # 34921 (정보 스키마 테이블과의 비교는 데이터 정렬을 따지지 않습니다.) 일 수 있습니다. * NIX 시스템에 있기 때문에 테이블 이름은 기본적으로 대소 문자를 구분하지만 Mifos 코드는 원래 Windows에서 개발되었으며 lower_case_table_names = 1로 설정해야합니다. –

관련 문제