vic*_*csz 6 sql-server oracle indexing clustered-index
一般来说......应该将连接表(即关联表)创建为索引组织表(Oracle),聚簇索引(SQL Server)....或普通旧堆表(在2列上具有单独的索引).
我看的方式,优点是:
速度提升.你正在避免堆表查找.
空间改善.你完全取消了堆表,所以你可能节省了大约30%的空间.
缺点:
索引跳过扫描(仅适用于Oracle)..将比全表扫描更快,但比索引扫描慢.因此,对复合键的第二列的搜索将稍微慢一点(Oracle),慢得多(MSSQL).
完整索引扫描将比全表扫描慢 - 所以如果大多数时候基于成本的优化器正在进行哈希联接(不利用索引)......你可能会期望性能更差.(假设RDBMS不首先过滤表).
这让我怀疑,如果您主要要做Hash Joins,那么Join Tables是否真的需要任何类型的索引.
我个人的经验法则是创建两个表关联实体作为索引组织表,主键约束是我希望更常用的访问“方向”。然后,我通常会添加一个唯一索引来覆盖键的相反顺序,因此在所有情况下优化器都应该能够使用唯一扫描或范围扫描访问。
三表(或更多)关联实体通常需要更多的分析。
此外,优化器将使用带有哈希连接操作的索引;通常完整扫描速度很快,但仍然有索引。
| 归档时间: |
|
| 查看次数: |
2263 次 |
| 最近记录: |