Есть ли в JDBC метод для получения статистики по таблицам и столбцам? - PullRequest
0 голосов
/ 24 октября 2018

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

1 Ответ

0 голосов
/ 24 октября 2018

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

См. DatabaseMetaData.getIndexInfo, специально для TYPE tableIndexStatistic:

CARDINALITY long => Если TYPE равно tableIndexStatistic, то это число строк в таблице;в противном случае это число уникальных значений в индексе. PAGES long => Если TYPE равно tableIndexStatistic, то это число страниц, используемых для таблицы, в противном случае этоколичество страниц, используемых для текущего индекса.

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

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

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

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