我与在Microsoft SQL Server 2008环境2个相关的表,它们通过一个GUID连接工作。在一个表中,该字段有类型varchar(50),另一种是正常类型作为uniqueidentifier。这显然是不好的,但因为它是由一个传统的软件给我现在不能改变这一点。

在转换SQL Server需要执行在每个内部连接使得查询运行非常缓慢,因为我不能使用索引的。我尝试添加一个计算列,这是持续,以获得存储为uniqueidentifer的ID。这样,我可以添加一个索引来让它运行得更快可能。我失败。

是否有人知道是否能在一个计算机列存储一个显式转换后的值。如果可以,有什么在这里使用的公式?

干杯, 的Matthias

有帮助吗?

解决方案

这为我工作:

CREATE TABLE t_uuid (charid VARCHAR(50) NOT NULL, uuid AS CAST(charid AS UNIQUEIDENTIFIER))

CREATE INDEX IX_uuid_uuid ON t_uuid (uuid)

INSERT
INTO    t_uuid (charid)
VALUES  (NEWID())

SELECT  *
FROM    t_uuid

其他提示

CONVERT(唯一标识符,your_varchar_here)

根据您需要多长时间让加盟转换,我会使用一个的 CTE 以数据类型转换。它的构造比内嵌视图(下一个最好的临时选项)更快。在任一情况下,你会暴露值作为从CTE /联视图结果列中的正确的数据类型,因此可以加入到它。 CTE示例:

WITH example AS (
   SELECT t.guid
          CONVERT(UniqueIdentifier, t.guid) 'cguid'
     FROM TABLE t)
SELECT t.*
  FROM TABLE t
  JOIN example e ON e.cguid = t.guid

内嵌视图示例:

SELECT t.*
  FROM TABLE t
  JOIN (SELECT t.guid
               CONVERT(UniqueIdentifier, t.guid) 'cguid'
          FROM TABLE t) e ON e.cguid = t.guid

它不会绕过对于GUID索引(假设一个所做的)将不被使用,但它也没有好的习惯WHERE子句中要被执行的数据类型转换。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top