2009-08-21 85 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) 

的更多信息:

  • 我使用MySQL 5.1.31-1ubuntu2在Ubuntu 9.04。
  • 「SHOW CREATE TABLE」確實顯示索引。

謝謝! -Adam

+0

我無法在5.0.45或5.0.51中複製它。史蒂夫的答案可能是正確的,你可能最好把它作爲一個錯誤提交給MySQL開發人員。 – Randy 2009-08-21 18:38:07

回答

2

ANSI/ISO SQL標準沒有關於索引的任何說法,所以我懷疑是否有一種「不是MySQL特定的」方式來查詢它們。標準的INFORMATION_SCHEMA在許多基表中包含CONSTRAINTS,ASSERTIONS和KEY_COLUMN_USAGE,但沒有任何關於索引的內容。在我能找到的標準中沒有提到統計公報。

你的報告聽起來像是一個bug。如果SELECT *返回行,則SELECT COUNT(*)不應返回零。也許有一個退步this bug

+0

謝謝,史蒂夫! table_name ='customer'(小寫)起作用,就像table_name LIKE'CUSTOMER'一樣。可能是你提到的錯誤,或者MySQL錯誤#34921(與信息架構表比較不符合排序規則)。由於我在* NIX系統上,因此表名默認區分大小寫,但Mifos代碼最初是在Windows上開發的,並且需要設置lower_case_table_names = 1。 – 2009-08-24 15:43:18