Eri*_*sot 5 sql indexing firebird
DB:firebird 2.5.4
我有1个表,2个字符串字段和1个计算字段:
Files
name varchar 256
extension varchar 4
filename computed by name||extension
Run Code Online (Sandbox Code Playgroud)
我想在这个表中搜索一个文件名(case insensisive)
查询是
Select *
from files f
where upper(f.filename) = upper('test.txt')
Run Code Online (Sandbox Code Playgroud)
这当然是有效的,为了加快查询速度,我在文件上创建了一个计算索引 upper(filename)
CREATE INDEX test ON FILES COMPUTED BY (upper(filename));
Run Code Online (Sandbox Code Playgroud)
现在,相同的查询不再起作用了!它什么都不返回.我尝试了较低的索引,但它也不起作用.
跆拳道?我错过了某处的选项吗?
火鸟似乎不支持计算字段上的计算索引。我将计算字段“文件名”替换为索引中的常规字段“名称||扩展名”。它解决了这个问题:
CREATE INDEX test ON FILES COMPUTED BY (upper(name||extension));
Run Code Online (Sandbox Code Playgroud)
错误报告在这里找到。
[编辑]
在尝试发现问题后,由于从早期版本迁移,我的数据库似乎出现内部错误。Mark Rotteveel 向我指出了描述该问题的发行说明:
http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes254.html#notes-253
我提取了元数据并重建了整个数据库。这解决了问题。请注意,备份和恢复也应该有效。
谢谢马克。
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |