一般来说,当涉及到加入表(即联结表)时,应该创建索引有序表(Oracle),聚集索引(SQL Server)或普通堆表(在两个列上分别建立单独的索引)。
我认为这样做的好处是:
1. 速度提升。您避免了对堆表的查找。
2. 空间利用率提高。您完全消除了堆表,因此可能节省约30%的空间。
缺点如下:
1. 索引跳过扫描(仅适用于Oracle)比全表扫描快,但比索引扫描慢。因此,在复合键的第二列上进行搜索将稍微慢一些(Oracle),更慢(MSSQL)。
2. 完全索引扫描将比完全表扫描慢 - 因此,如果大多数时间成本基于优化器正在执行哈希连接(不利用索引),则可以预期性能较差。(假设RDBMS没有先筛选表)。
这让我质疑是否真的需要任何类型的索引用于加入表,如果您主要将进行哈希连接。
我认为这样做的好处是:
1. 速度提升。您避免了对堆表的查找。
2. 空间利用率提高。您完全消除了堆表,因此可能节省约30%的空间。
缺点如下:
1. 索引跳过扫描(仅适用于Oracle)比全表扫描快,但比索引扫描慢。因此,在复合键的第二列上进行搜索将稍微慢一些(Oracle),更慢(MSSQL)。
2. 完全索引扫描将比完全表扫描慢 - 因此,如果大多数时间成本基于优化器正在执行哈希连接(不利用索引),则可以预期性能较差。(假设RDBMS没有先筛选表)。
这让我质疑是否真的需要任何类型的索引用于加入表,如果您主要将进行哈希连接。