【问题标题】:Does JDBC have a method to get table and column statistics?JDBC 是否有获取表和列统计信息的方法?
【发布时间】:2018-10-25 22:34:13
【问题描述】:

JDBC 是否支持检索表和列统计信息(如 NUM_DISTINCT),还是我必须直接访问每个数据库供应商的统计信息表? (例如,对于 Oracle, "select column_name, num_distinct, density from dba_tab_col_statistics where table_name='myTable'")

【问题讨论】:

    标签: jdbc statistics


    【解决方案1】:

    JDBC 与数据库无关,在统计数据方面没有定义太多。当前在 JDBC 中定义的唯一类型的表相关统计信息是 DatabaseMetaData.getIndexInfo 的一部分,它们在很大程度上是可选的。我不确定哪些驱动程序实现了它,以及在多大程度上实现了它。

    见DatabaseMetaData.getIndexInfo,专供TYPEtableIndexStatistic:

    1. CARDINALITY long => 当TYPE 为tableIndexStatistic 时,则这是表中的行数;否则,它是数字 索引中的唯一值。
    2. PAGES long => 当TYPE 是tableIndexStatistic 那么这是表格使用的页数,否则是页数 用于当前索引的页面数。

    即使您的数据库驱动程序支持tableIndexStatistic,您最好还是使用数据库特定的功能来获取统计信息,因为它们更有可能被记录在案,有更广泛的选择,而且有更多的人知道含义和解释。

    虽然我是 JDBC 专家组的成员,但我不知道这种缺席的历史原因(或者在我加入之前是否曾经出现过),但如果我必须进行理论化,我认为这可能是因为数据库之间统计数据的类型和可用性差异很大。

    这种多样性使得标准化仍然对双方都可用的 API 变得困难(几乎没有统计数据和各种各样的统计数据)。没有什么比拥有一个广泛的(也许是复杂的)API 更令人沮丧的了,因为您的数据库不支持它,所以什么也得不到。类似地,拥有一个包含大量统计信息的数据库可能会非常令人沮丧,但您无法访问其中的一些数据,因为它不符合标准 API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 2012-02-27
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多