我需要根据表中的其他两列创建一个连接列。一列是年份(10 个不同的值),一列是一个人的 ID 值(约 150,000 个不同的值)。这被不接受多列作为键值的 ETL 任务用作业务键,因此我需要将此值保存在我的数据库中。
也就是说,我可以选择如何创建该值,并且我想知道顺序(ID + Year 或 Year + ID)是否会以任何方式影响性能。如果年份先到,则前四个字符将始终是一组有限的实际年份之一。如果 ID 先出现,则每个用户都会改变。两者有什么区别吗?
此列将获得的唯一用途是在 ETL 加载期间,它将用于连接来自源表和临时表的数据以检查两者之间的差异。基值将在下表中,我计划在这些基值上创建一个聚集索引。
样本数据:
╔══════════════╦══════════════╦═════════╦═════════╗
║ COMPOSITE_1 ║ COMPOSITE_2 ║ AC_YEAR ║ ST_ID ║
╠══════════════╬══════════════╬═════════╬═════════╣
║ 0000001|2005 ║ 2005|0000001 ║ 2005 ║ 0000001 ║
║ 0000001|2006 ║ 2006|0000001 ║ 2006 ║ 0000001 ║
║ 0000001|2009 ║ 2009|0000001 ║ 2009 ║ 0000001 ║
║ 0000001|2010 ║ 2010|0000001 ║ 2010 ║ 0000001 ║
║ 0000001|2012 ║ 2012|0000001 ║ 2012 ║ 0000001 ║
║ 0000001|2013 ║ 2013|0000001 ║ 2013 ║ 0000001 ║
║ 0000002|2005 ║ 2005|0000002 ║ 2005 ║ 0000002 ║
║ 0000002|2006 ║ 2006|0000002 ║ 2006 ║ 0000002 ║
║ 0000002|2007 ║ 2007|0000002 ║ 2007 ║ 0000002 ║
║ 0000002|2008 ║ 2008|0000002 ║ 2008 ║ 0000002 ║
║ 0000002|2009 ║ 2009|0000002 ║ 2009 ║ 0000002 ║
║ 0000002|2010 ║ 2010|0000002 ║ 2010 ║ 0000002 ║
║ 0000002|2012 ║ 2012|0000002 ║ 2012 ║ 0000002 ║
║ 0000002|2013 ║ 2013|0000002 ║ 2013 ║ 0000002 ║
║ 0000002|2014 ║ 2014|0000002 ║ 2014 ║ 0000002 ║
╚══════════════╩══════════════╩═════════╩═════════╝
问题一:Composite_1 或 Composite_2 在 JOIN 期间会给我更好的性能吗?
问题二:我是否需要索引 Composite 列,如果需要,我应该单独/与其他人一起做吗?SSIS 任务将使用它进行内存中的 JOIN,我计划将它作为 ORDER BY 包含在我的 OLE DB 源组件中。
问题三:聚集索引是属于Composite列,还是Year和ID列?编辑:或者,因为我知道 Year 和 ID 不会影响 Composite 的顺序,我应该只包括所有三个吗?