SQL有效地将列组合在一起

时间:2012-03-16 14:16:52

标签: sql performance tsql

我使用的一系列T-SQL查询运行速度非常慢。我怀疑导致一些问题的查询的一部分是我必须对它们进行的一系列转换。

这就是问题所在。我必须将4列组合在一起作为nvarchar / varchar,因为它们的组合形成了另一个表中的条目的(半) - 唯一键(我知道可怕的想法,但我坚持使用它)。

这四列是: t_orno,t_reno,t_pono,t_srnb:没有索引的所有INT列。

我这样做的方式是这样的:

Cast(t_orno AS nvarchar(10)) + '-' + Cast(t_reno as nvarchar(10)) + 
    '-' + Cast(t_pono as nvarchar(5)) + '-' + Cast(t_srnb as nvarchar(5))

不幸的是,我不得不将这些列合并在一起。有没有更好的方法呢?查询需要更高效,并且必须有一个比单独抛出所有四个更好的方法吗?

假设:数据库是完全不可更改的 - 遗憾的是它......(不想进入那个......)

感谢您的帮助。

编辑:根据有关表格的更多信息的请求:

正在查询的两个表只包含一个索引,它位于PK列上。再次注意,这些表上无法添加/更改任何内容。

正在连接的表包含这四列的组合: BaanID> nvarchar,没有索引。

3 个答案:

答案 0 :(得分:2)

您是否尝试过反向,即在“ - ”字符上拆分“另一个表中的条目”并将每个表格转换为int - 可能会产生更好的性能?

答案 1 :(得分:1)

我会尝试使用持久化视图并在其上创建索引。这篇文章可以帮助您:http://technet.microsoft.com/en-us/library/cc917715.aspx

或者您可以将计算列添加到包含t_ *列的表中并索引此列。

答案 2 :(得分:0)

我认为这是至关重要的一点:

  

正在连接的表包含这四列的组合:BaanID> nvarchar,没有索引

除非您正在处理相对较小的表,否则在未编制索引的列上将两个表连接在一起可能会很昂贵。