Неверное количество строк в MySQL при чтении индексов таблицы из INFORMATION_SCHEMA.STATISTICS - PullRequest
0 голосов
/ 21 августа 2009

Я вижу некоторые странные результаты при запросе INFORMATION_SCHEMA.STATISTICS для имен индексов. Когда я делаю «SELECT * ...», я вижу 2 индекса, но «SELECT COUNT (*) ...» говорит, что count (*) равен 0. Кто-нибудь знает почему? Есть ли лучший способ получить индексы для таблицы, в идеале не специфичные для 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

1 Ответ

2 голосов
/ 21 августа 2009

Стандарту ANSI / ISO SQL нечего сказать об индексах, поэтому я сомневаюсь, что существует «не специфичный для MySQL» способ запроса их. INFORMATION_SCHEMA стандарта включает в себя CONSTRAINTS, ASSERTIONS и KEY_COLUMN_USAGE среди множества базовых таблиц, но в индексах ничего нет. Даже СТАТИСТИКА не упоминается в стандарте, который я могу найти.

То, что вы сообщаете, звучит для меня как ошибка. Если SELECT * возвращает строки, SELECT COUNT (*) не должен возвращать ноль. Возможно, произошла регрессия этой ошибки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...