在firebird中使用计算的上部索引来比较不区分大小写的字符串

时间:2015-05-07 05:50:49

标签: sql indexing firebird

DB:firebird 2.5.4

我有1个表,2个字符串字段和1个计算字段:

Files
 name varchar 256
 extension varchar 4
 filename computed by name||extension

我想在此表中搜索文件名(不包括案例)

查询

Select * 
from files f
where upper(f.filename) = upper('test.txt')

这当然是有效的,为了加快查询速度,我在upper(filename)上的文件上创建了一个计算索引

CREATE INDEX test ON FILES COMPUTED BY (upper(filename));

现在,相同的查询不再起作用了!它什么都不返回。 我尝试了较低的索引,但它也不起作用。

跆拳道?我在某个地方错过了一个选项吗?

1 个答案:

答案 0 :(得分:4)

似乎firebird不支持计算字段上的计算索引。 我用index中的常规字段'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

我提取了元数据并重建了整个数据库。这解决了这个问题。 请注意,备份和还原也应该有效。

谢谢Mark。