【问题标题】:Associative arrays in oracleoracle中的关联数组
【发布时间】:2013-09-14 22:41:30
【问题描述】:

据我了解,关联数组存储键值对,并且长度可变。就像我们可以向关联数组添加任意数量的键值对一样。

我也阅读使用 while循环遍历备用关联数组和 For循环遍历密集关联数组。

关联数组如何是稀疏的?它是动态的,我们正在向它添加值

【问题讨论】:

  • 你问的是存储过程中的关联数组吗?
  • 我在询问 Oracle 中 Collection 下的关联数组,并使用以下语法定义 ------------------------ ------ TYPE sum_multiples IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER
  • 本次演讲是关于 Python 的,但对 dict 数据类型的解释将告诉您很多有关关联数组内部工作原理的信息:blip.tv/pycon-us-videos-2009-2010-2011/…

标签: sql oracle associative-array


【解决方案1】:

关联数组是稀疏的,因为它们是按照键的哈希顺序存储的,而不是按照它们插入的顺序存储的。数组是密集的,因为元素总是在添加时附加到末尾。当您在数组上执行诸如插入之类的操作时,您实际上是在创建一个新数组并附加值。这使得插入“昂贵”,因为它们需要更多的 CPU 时间来找到插入点,并且在插入发生时需要更多的内存来存储中间副本。使用关联数组插入(只要它不会将关联数组的大小扩展到哈希键大小之外)速度很快,因为它需要可预测的少量 CPU 和内存。数组昂贵的另一件事是通过其键查找特定值。使用关联数组,您可以快速查找任何元素(或立即知道没有具有该键的元素),而使用数组,您必须测试每个索引以了解元素的位置或是否存在。在小型系列上,这似乎没什么大不了的,但这些问题只会随着您的系列变得更大而变得更糟。不要认为关联数组是最好的也是唯一的方法。他们通过使用更多内存来提高速度。此外,迭代关联数组中的所有键(取决于数据类型实现)可能比迭代密集数组要慢。与往常一样,最好的建议是尝试为工作选择最好的工具。

【讨论】:

    【解决方案2】:

    关联数组是密集的还是稀疏的,这取决于你如何索引它。

    如果您使用主键或 pls_integer 或可以密集打包数据的东西对其进行索引,那么关联数组就会变得密集。而且获取数据会很快。

    如果您按某个 varchar2 列或其他不易获取的列进行索引,那么该特定关联数组是稀疏的。

    【讨论】:

    • 1.如果它不容易获取那么它是稀疏的??????? 2. varchar2索引数组有没有可能密集打包?
    • 这取决于数据。 Varchar2 也可以很密集。但大多数时候它会很稀疏。这完全取决于您存储在数组中的数据。
    猜你喜欢
    • 2016-09-09
    • 2021-05-30
    • 1970-01-01
    • 2020-11-25
    • 2011-03-02
    • 1970-01-01
    • 2013-06-18
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多