Есть ли в JDBC способ получения статистики по таблицам и столбцам?

Поддерживает ли JDBC получение статистики таблиц и столбцов (например, NUM_DISTINCT) или мне нужно напрямую обращаться к таблице статистики для каждого поставщика БД? (например, для Oracle "выберите column_name, num_distinct, плотность из dba_tab_col_statistics, где table_name = 'myTable'")

Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
2
0
152
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

JDBC не зависит от базы данных и мало что определяет с точки зрения статистики. Единственный тип связанной с таблицами статистики, определенный в настоящее время в JDBC, - это часть DatabaseMetaData.getIndexInfo, и в большинстве случаев они не являются обязательными. Я не уверен, какие драйверы это реализуют и в какой степени.

См. DatabaseMetaData.getIndexInfo, особенно для TYPEtableIndexStatistic:

  1. CARDINALITYlong => When TYPE is tableIndexStatistic, then this is the number of rows in the table; otherwise, it is the number of unique values in the index.
  2. PAGESlong => When TYPE is tableIndexStatistic then this is the number of pages used for the table, otherwise it is the number of pages used for the current index.

Даже если драйвер для вашей базы данных поддерживает tableIndexStatistic, вам, вероятно, лучше использовать специальные функции базы данных для получения статистики, поскольку они с большей вероятностью будут задокументированы, имеют более широкий диапазон опций и больше людей знают о значении и интерпретация.

Хотя я являюсь членом экспертной группы JDBC, мне не известны исторические причины этого отсутствия (или если они когда-либо возникали до того, как я присоединился), но если бы мне пришлось теоретизировать, я думаю, что это, вероятно, потому что типы и доступность статистики сильно различаются между базами данных.

Такое разнообразие затрудняет стандартизацию API, который по-прежнему может использоваться обеими сторонами (практически нет статистики и большое разнообразие статистических данных). Нет ничего более разочаровывающего, чем иметь обширный (и, возможно, сложный) API, чтобы просто ничего не получить от него, потому что он не поддерживается для вашей базы данных. Точно так же может быть довольно неприятно иметь базу данных с большим количеством статистических данных, но вы не можете получить доступ к некоторым из них, потому что они просто не соответствуют стандартному API.

Другие вопросы по теме