我有一个通用代码,用于从Firebird数据库(FB2.1)检索DDL信息。它生成像
这样的SQL代码SELECT * FROM MyTable where 'c' <> 'c'
我无法更改此代码。实际上,如果重要的话,它就在Report Builder 10中。
事实上,我的数据库中的某些表格变得过于庞大(> 1M记录)并且该查询开始执行时间太长。
如果我尝试执行
SELECT * FROM MyTable where SomeIndexedField = SomeImpossibleValue
它显然会使用该索引并且运行得非常快。
好吧,数据库发现那是一个不可能的匹配器并进行某种优化并避免针对每一行进行测试都不会那么难。
有没有办法让我的firebird数据库优化搜索?
答案 0 :(得分:1)
由于过滤条件是否定命题(并且也没有将列引用到搜索,而只是将值与另一个值进行比较),Firebird需要进行全表扫描(不使用任何索引)来确认这些记录不符合您的标准。
如果您无法更改,则需要等待即将推出的3.0版本,这将实现Boolean data type,因此应该提前评估“常量”假冒比较(也许客户端库会执行此操作在将语句发送到服务器之前进行评估?)。