SQL ETL批处理过程中联接的索引
假设我在批处理ETL过程中有一个CTA,具有如下连接:SQL ETL批处理过程中联接的索引,sql,sql-server,indexing,etl,Sql,Sql Server,Indexing,Etl,假设我在批处理ETL过程中有一个CTA,具有如下连接: -- SQL Server syntax SELECT * INTO output FROM input1 JOIN input2 on (input1.join_column = input2.join_column) -- Everyone else CREATE TABLE output AS SELECT * FROM input1 JOIN input2 on (input1.join_column = input2.join
-- SQL Server syntax
SELECT *
INTO output
FROM input1 JOIN input2 on (input1.join_column = input2.join_column)
-- Everyone else
CREATE TABLE output AS
SELECT *
FROM input1 JOIN input2 on (input1.join_column = input2.join_column)
在input1.join\u列
或input2.join\u列
上使用索引(聚集或其他)有什么好处吗?如果我希望命中两个表中的每一行
我的印象是,索引对于选择性谓词非常有用——也就是说,帮助您快速获得一小部分行。但我想知道,在执行类似ETL的操作时,加入是否有任何附带好处
我的问题主要针对SQL Server,但我也有兴趣知道PostgreSQL的答案 索引可能会有所帮助,但这要视情况而定 数据库有许多不同的方式来处理连接:
- 嵌套循环(先在一个表中循环,然后再在另一个表中循环)
- 使用索引嵌套循环(在一个表中循环并在另一个表中查找值)
- 对表进行排序并合并
- 使用索引对表进行排序和合并
- 散列
连接
,第二种方法非常常见,如果两个表都适合内存,则性能良好。处理过程基本上是在一个表中循环,并使用索引在另一个表中查找适当的值
散列和合并(没有索引)都需要读取和写入中间数据结构的数据。这会在实践中减慢算法的速度——即使理论性能更好
因此,是的,索引对于这些类型的查询非常有用。索引可能会有所帮助,但这取决于具体情况 数据库有许多不同的方式来处理连接:
- 嵌套循环(先在一个表中循环,然后再在另一个表中循环)
- 使用索引嵌套循环(在一个表中循环并在另一个表中查找值)
- 对表进行排序并合并
- 使用索引对表进行排序和合并
- 散列
连接
,第二种方法非常常见,如果两个表都适合内存,则性能良好。处理过程基本上是在一个表中循环,并使用索引在另一个表中查找适当的值
散列和合并(没有索引)都需要读取和写入中间数据结构的数据。这会在实践中减慢算法的速度——即使理论性能更好
因此,是的,索引对于这些类型的查询非常有用。您是否创建了索引并对性能进行了基准测试?运行时间?读取?您是否创建了索引并对性能进行了基准测试?运行时间?阅读?