Sql CHAR与VARCHAR以及加入时的后果
正如前一篇文章(讨论了何时使用CHAR而不是VARCHAR)所指出的,当存储的值长度大致相同时,可以获得性能优势。当然,我会选择CHAR作为存储2个字符状态代码数据的数据类型 我只是想确认一下,作为一个健全性检查,这意味着当执行对该列进行过滤的SQL时,必须用足够的空格填充过滤后的值,以使其等于定义的char字段长度 例如,假设一个表“CODE\U table”,其中第10列CHAR\U CODE定义为CHAR(10): 从代码表中选择*,其中10字符代码='ABCDE' 如果10_CHAR_代码是另一个表的“逻辑”外键,但不存在特定的关系完整性约束,则存储在10_CHAR_代码查找表中的值理想情况下应为相同的数据类型(CHAR(10),以避免在加入时必须执行低效的RTRIM函数 (我们有一个小规模的数据仓库,DBA认为引用完整性约束效率低下,因此我们最终会在表之间使用不一致的数据类型定义。)Sql CHAR与VARCHAR以及加入时的后果,sql,sql-server,Sql,Sql Server,正如前一篇文章(讨论了何时使用CHAR而不是VARCHAR)所指出的,当存储的值长度大致相同时,可以获得性能优势。当然,我会选择CHAR作为存储2个字符状态代码数据的数据类型 我只是想确认一下,作为一个健全性检查,这意味着当执行对该列进行过滤的SQL时,必须用足够的空格填充过滤后的值,以使其等于定义的char字段长度 例如,假设一个表“CODE\U table”,其中第10列CHAR\U CODE定义为CHAR(10): 从代码表中选择*,其中10字符代码='ABCDE' 如果10_CHAR_代
我的印象准确吗?在SQL Server的字符串比较中,尾随空格被忽略。无需
RTRIM
自己动手(这会使条件无法组织)Martin似乎是正确的。您可能需要测试数据库中使用的特定排序规则。以下是一些测试代码:
DECLARE @ten_char_field char(10),
@ten_char_varchar varchar(10)
SET @ten_char_field = 'ABCD'
SET @ten_char_varchar = 'ABCD'
SELECT @ten_char_field, CASE WHEN @ten_char_field = 'ABCD' THEN 1 ELSE 0 END,
@ten_char_varchar, CASE WHEN @ten_char_varchar = 'ABCD' THEN 1 ELSE 0 END
从我读到的几件事来看,实际上,在整数上进行连接比在varchar列上进行连接可以获得更好的性能。:-D