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

标签 sql indexing firebird

DB:火鸟 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));

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

卧槽?我是否错过了某个选项?

最佳答案

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

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

谢谢马克。

关于sql - 在 firebird 中使用计算的上位索引来比较不区分大小写的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30092909/

相关文章:

sql - Firebird 和 SQL Server 删除组中最高的行

mysql - SQL FROM_UNIXTIME 不正确

c++ - 当底层 SQL 表从我的应用程序外部更改时自动刷新 QSqlTableModel/QTableView

indexing - 谷歌中的前向索引实现

firebird - 查找旧版 firebird/Interbase 数据库密码

sql - 一行中多个表的值

mysql - 如何使用 MySQL 查询添加更多条件?

MYSQL - key '0' 的重复条目 'PRIMARY'

matlab - 在不使用 sub2ind 的情况下使用下标访问值

database - 由于类型转换未使用索引?