在 firebird 中使用计算的上索引来比较不区分大小写的字符串
Using computed upper index in firebird to compare case insensitive strings
数据库:火鸟 2.5.4
我有 1 个 table、2 个字符串字段和 1 个计算字段:
Files
name varchar 256
extension varchar 4
filename computed by name||extension
我想在此 table 中搜索文件名(不区分大小写)
查询是
Select *
from files f
where upper(f.filename) = upper('test.txt')
这当然有效,为了加快查询速度,我在 upper(filename)
上的文件上创建了一个计算索引
CREATE INDEX test ON FILES COMPUTED BY (upper(filename));
现在,相同的查询不再有效!它returns没什么。
我尝试了一个较低的索引,但它也不起作用。
卧槽?我是不是错过了什么地方?
firebird 似乎不支持计算字段上的计算索引。
我用索引中的常规字段 'name||extension' 替换了计算字段 'filename'。它解决了问题:
CREATE INDEX test ON FILES COMPUTED BY (upper(name||extension));
发现错误报告 here。
[编辑]
在尝试发现问题后,由于从早期版本迁移,我的数据库似乎有内部错误。 Mark Rotteveel 向我指出了描述问题的发行说明:
http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes254.html#notes-253
我提取了元数据并重建了整个数据库。这解决了这个问题。
请注意,备份和恢复也应该有效。
谢谢马克。
数据库:火鸟 2.5.4
我有 1 个 table、2 个字符串字段和 1 个计算字段:
Files
name varchar 256
extension varchar 4
filename computed by name||extension
我想在此 table 中搜索文件名(不区分大小写)
查询是
Select *
from files f
where upper(f.filename) = upper('test.txt')
这当然有效,为了加快查询速度,我在 upper(filename)
CREATE INDEX test ON FILES COMPUTED BY (upper(filename));
现在,相同的查询不再有效!它returns没什么。 我尝试了一个较低的索引,但它也不起作用。
卧槽?我是不是错过了什么地方?
firebird 似乎不支持计算字段上的计算索引。 我用索引中的常规字段 'name||extension' 替换了计算字段 'filename'。它解决了问题:
CREATE INDEX test ON FILES COMPUTED BY (upper(name||extension));
发现错误报告 here。
[编辑]
在尝试发现问题后,由于从早期版本迁移,我的数据库似乎有内部错误。 Mark Rotteveel 向我指出了描述问题的发行说明:
http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes254.html#notes-253
我提取了元数据并重建了整个数据库。这解决了这个问题。 请注意,备份和恢复也应该有效。
谢谢马克。