Postgresql Postgres自定义域类型vs唯一
我不能确定我的表中是否存储了空文本。因此,我创建了一个域类型:Postgresql Postgres自定义域类型vs唯一,postgresql,rdbms,Postgresql,Rdbms,我不能确定我的表中是否存储了空文本。因此,我创建了一个域类型: 创建域非空文本作为文本检查(值~'\S')并将所有文本类型更改为非空文本 到目前为止还不错。但是当我将类型改回文本并创建一个唯一的索引和一个空值行时,效率会更高吗?您当然需要对其进行基准测试,但我认为您应该改变您的方法 您拥有的当前域类型逻辑计算内存中的字符串。第二种方法需要访问索引并查找缓存中可能存在或不存在的块。与内存中的操作相比,访问存储(即使不是每次都访问)是非常昂贵的,因此这可能不是一个好主意。我认为您对域的方法是正确的。
创建域非空文本作为文本检查(值~'\S')代码>并将所有文本类型更改为非空文本
到目前为止还不错。但是当我将类型改回文本并创建一个唯一的索引和一个空值行时,效率会更高吗?您当然需要对其进行基准测试,但我认为您应该改变您的方法
您拥有的当前域类型逻辑计算内存中的字符串。第二种方法需要访问索引并查找缓存中可能存在或不存在的块。与内存中的操作相比,访问存储(即使不是每次都访问)是非常昂贵的,因此这可能不是一个好主意。我认为您对域的方法是正确的。具有唯一约束的替代方案是一个有趣的想法,但我认为它是过早的优化。一个唯一的索引是完全不同的,然后检查非空值是肯定的。但如果我创建的行中包含所有禁止的值,那么就不能再添加这些值了。显然,考虑将您的检查条件更改为值“”
,以使其更快速、更易于阅读是非常糟糕的。@petereinstraut然后允许使用带有多个空格的值?是的,这取决于您所说的“空文本”的含义。因此,如果您实际上并不需要,则添加唯一索引绝对不是一个好主意@差不多,是的。