Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL ETL批处理过程中联接的索引_Sql_Sql Server_Indexing_Etl - Fatal编程技术网

SQL ETL批处理过程中联接的索引

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

假设我在批处理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_column)

input1.join\u列
input2.join\u列
上使用索引(聚集或其他)有什么好处吗?如果我希望命中两个表中的每一行

我的印象是,索引对于选择性谓词非常有用——也就是说,帮助您快速获得一小部分行。但我想知道,在执行类似ETL的操作时,加入是否有任何附带好处


我的问题主要针对SQL Server,但我也有兴趣知道PostgreSQL的答案

索引可能会有所帮助,但这要视情况而定

数据库有许多不同的方式来处理连接:

  • 嵌套循环(先在一个表中循环,然后再在另一个表中循环)
  • 使用索引嵌套循环(在一个表中循环并在另一个表中查找值)
  • 对表进行排序并合并
  • 使用索引对表进行排序和合并
  • 散列
(还有更多关于这些的变体!)

优化器的选择取决于数据库、硬件、数据和统计数据的功能

这就是说,对于这种类型的
连接
,第二种方法非常常见,如果两个表都适合内存,则性能良好。处理过程基本上是在一个表中循环,并使用索引在另一个表中查找适当的值

散列和合并(没有索引)都需要读取和写入中间数据结构的数据。这会在实践中减慢算法的速度——即使理论性能更好


因此,是的,索引对于这些类型的查询非常有用。

索引可能会有所帮助,但这取决于具体情况

数据库有许多不同的方式来处理连接:

  • 嵌套循环(先在一个表中循环,然后再在另一个表中循环)
  • 使用索引嵌套循环(在一个表中循环并在另一个表中查找值)
  • 对表进行排序并合并
  • 使用索引对表进行排序和合并
  • 散列
(还有更多关于这些的变体!)

优化器的选择取决于数据库、硬件、数据和统计数据的功能

这就是说,对于这种类型的
连接
,第二种方法非常常见,如果两个表都适合内存,则性能良好。处理过程基本上是在一个表中循环,并使用索引在另一个表中查找适当的值

散列和合并(没有索引)都需要读取和写入中间数据结构的数据。这会在实践中减慢算法的速度——即使理论性能更好


因此,是的,索引对于这些类型的查询非常有用。

您是否创建了索引并对性能进行了基准测试?运行时间?读取?您是否创建了索引并对性能进行了基准测试?运行时间?阅读?