SQL 服务器索引 - varchar(100) 与 varbinary(100)? [转换数据]
SQL Server indexing - varchar(100) vs varbinary(100)? [convert data]
在 varchar(x)
或 varbinary(x)
列上设置索引(主要或次要)更好吗?
我什至不确定它是否重要。然而,我在网上看到的(谷歌搜索 - varchar vs varbinary)是 varchar
几乎死了或被推到路边。那么索引更好吗?会不会是索引的类型?
优秀场景: 索引电子邮件地址([编辑] 加密字节数组 {varbinary} 或等效字符串 {varchar})
谢谢
回答?
varbinary
上的索引似乎是有史以来最糟糕的事情。我没看错吗?
在varchar 上创建索引比在varbinary 上创建索引更好。 Varbinary 适用于 blob,但您也可以将字符串存储在 varbinary 中。这样的 blob 是对您的实际数据的补充。你自己的研究也得出了这个结论。
用户可以输入多种格式的电子邮件地址 - abc@xyz.com 或 Abc@Xyz.com 等。store/extract 这样的信息更容易 in/from 可变字符字段。 Joe Enos 绝对正确,二进制比较将区分大小写(比较二进制信息),而 varchar 将不区分大小写,假设您是这样设置数据库和列排序规则的。使用 varbinary,您还必须 careful about padding.
Varchar 还活着并且很健康。当您索引 varchar(100) 时,请尝试使用非聚集索引。我的一般偏好是在大多数情况下使用代理键作为聚集索引。
要使用的正确数据类型由列的内容决定。
while encrypting an email address I have a byte array
这是二进制数据,应存储为 varbinary
(除非加密例程输出固定长度的数组,然后使用 binary
)。
将 varbinary
转换为 varchar
在存储方面没有任何好处(反正所有内容都以二进制形式存储)并且可能会导致不正确的结果。
以下都是return"yes"我的默认排序
SELECT
CASE
WHEN cast(0xE6 AS VARCHAR(20)) = cast(0x6165 AS VARCHAR(20))
THEN 'yes' else 'no'
END,
CASE
WHEN cast(0xcc0000 AS VARCHAR(20)) = cast(0xcc2020 AS VARCHAR(20))
THEN 'yes' else 'no'
END,
CASE
WHEN cast(0x202020 AS VARCHAR(20)) = cast(0x AS VARCHAR(20))
THEN 'yes' else 'no'
END
添加 COLLATE LATIN1_GENERAL_BIN
会改变前两个但不会改变第三个的结果。
我希望查找 varbinary(n)
列比查找 varchar(n)
列更快,因为比较例程更简单,但对于带有二进制文件的 varchar 列来说可能不多整理。
在 varchar(x)
或 varbinary(x)
列上设置索引(主要或次要)更好吗?
我什至不确定它是否重要。然而,我在网上看到的(谷歌搜索 - varchar vs varbinary)是 varchar
几乎死了或被推到路边。那么索引更好吗?会不会是索引的类型?
优秀场景: 索引电子邮件地址([编辑] 加密字节数组 {varbinary} 或等效字符串 {varchar})
谢谢
回答?
varbinary
上的索引似乎是有史以来最糟糕的事情。我没看错吗?
在varchar 上创建索引比在varbinary 上创建索引更好。 Varbinary 适用于 blob,但您也可以将字符串存储在 varbinary 中。这样的 blob 是对您的实际数据的补充。你自己的研究也得出了这个结论。
用户可以输入多种格式的电子邮件地址 - abc@xyz.com 或 Abc@Xyz.com 等。store/extract 这样的信息更容易 in/from 可变字符字段。 Joe Enos 绝对正确,二进制比较将区分大小写(比较二进制信息),而 varchar 将不区分大小写,假设您是这样设置数据库和列排序规则的。使用 varbinary,您还必须 careful about padding.
Varchar 还活着并且很健康。当您索引 varchar(100) 时,请尝试使用非聚集索引。我的一般偏好是在大多数情况下使用代理键作为聚集索引。
要使用的正确数据类型由列的内容决定。
while encrypting an email address I have a byte array
这是二进制数据,应存储为 varbinary
(除非加密例程输出固定长度的数组,然后使用 binary
)。
将 varbinary
转换为 varchar
在存储方面没有任何好处(反正所有内容都以二进制形式存储)并且可能会导致不正确的结果。
以下都是return"yes"我的默认排序
SELECT
CASE
WHEN cast(0xE6 AS VARCHAR(20)) = cast(0x6165 AS VARCHAR(20))
THEN 'yes' else 'no'
END,
CASE
WHEN cast(0xcc0000 AS VARCHAR(20)) = cast(0xcc2020 AS VARCHAR(20))
THEN 'yes' else 'no'
END,
CASE
WHEN cast(0x202020 AS VARCHAR(20)) = cast(0x AS VARCHAR(20))
THEN 'yes' else 'no'
END
添加 COLLATE LATIN1_GENERAL_BIN
会改变前两个但不会改变第三个的结果。
我希望查找 varbinary(n)
列比查找 varchar(n)
列更快,因为比较例程更简单,但对于带有二进制文件的 varchar 列来说可能不多整理。