SQL Server 中的聚集索引与 Oracle 中的索引组织表

JHF*_*HFB 9 index oracle sql-server

我正在以数据库开发人员的身份从 SQL Server 过渡到 Oracle,并在这里找到了一些很棒的资源(如何从 SQL Server DBA 过渡到 Oracle?以及作为 DBA,我将如何从 Oracle 过渡到 SQL Server ? ) 但我很难找到有关在 Oracle 中使用索引组织表的好信息。

在我之前的生活中,我们在 OLTP 风格的数据集市中广泛使用了 SQL Server 中的聚集索引,并取得了巨大的成功。索引组织表是否是 Oracle 中方便的工具?

Vin*_*rat 8

如果您要从 SQL Server 过渡到 Oracle,我建议首先尝试使用堆表,因为它们是在 Oracle 中存储数据的标准形式。对于大多数工作负载,Oracle 中带有常规索引的堆表是关于 DML 和查询性能的最平衡的存储形式。

如果后来发现有性能问题或瓶颈,则应考虑专门的高级存储方法,例如 IOT、分区、集群、反向键索引等。

特别是关于物联网,我建议不要将它们普遍使用,因为有很多“陷阱”你可能不想作为初学者进入:

  • IOT 没有真正的 rowid(因为本身没有表)。
  • 因此,IOT 上的二级索引没有指向行的真正指针,而只是猜测,这可能会导致索引扫描效率低下。
  • 某些功能在 IOT 上被禁用,例如虚拟列表压缩、复合分区。
  • 您必须在创建时决定哪里存储非索引列(内联或溢出段),这可能会导致某些查询的性能下降。


小智 6

Oracle 中的 IOT 与 SS 中的聚集索引并不完全相同,因为 Oracle 统计信息包括行的物理分散,而 SS 在其统计信息中不包括物理位置。有关详细信息,请参阅 Lewis 和 Friitchey 之间关于 Oracle 和 Sql Server 中的统计信息的辩论。( http://www.red-gate.com/products/oracle-development/deployment-suite-for-oracle/education/webinars/webinar-statistics-oracle-sql-server-jonathan-lewis ) 这就是为什么一个集群SS 中的索引比堆好。聚集索引将物理位置数据添加到统计信息中。当您知道索引提供将被搜索的数据行的托管时,IOT 是很好的,例如 order_date 上的索引和 order 表的 customer 将成为一个很好的 IOT。