sql - 改进 Firebird 数据库上的 '% LIKE %' 查询

标签 sql firebird

情况:

我正在尝试使用“LIKE”语句编写一个有效的查询来将一段文本放入带有短文本的列中。

型号:

Table 'EVENTSGENERAL' : { ID (KEY), GENERATOR_ (FK), DATETIME, COMPUTERNAME, OSLOGIN, DBLOGIN, INFOTYPE, INFO }

Table 'EVENTSGENERATORS' : { ID (KEY), GENERATOR_ (FK), SHORTNAME, LONGNAME }

Table 'EVENTSINFOTYPES'  : { ID (KEY), GENERATOR_ (FK), VERSION_, INFOTYPE, DESCRIPTION }

索引:EVENTSGENERAL.GENERATOR , EVENTSGENERAL.DATETIME , EVENTSINFOTYPES.INFOTYPE一切升华。

我的查询:
SELECT FIRST @first SKIP @skip A.ID,B.LONGNAME,  A.DATETIME, A.COMPUTERNAME,A.OSLOGIN, A.DBLOGIN, C.DESCRIPTION, A.INFO
FROM EVENTSGENERAL A JOIN EVENTSGENERATORS B ON B.GENERATOR_ = A.GENERATOR_
JOIN EVENTSINFOTYPES C ON C.GENERATOR_ = A.GENERATOR_ AND C.INFOTYPE = A.INFOTYPE
WHERE C.DESCRIPTION LIKE '%VALUE%'

问题:

此查询将在超大数据库上运行。有什么办法可以改进吗?
我正在使用 Firebird 数据库。

提前致谢。

最佳答案

不,不幸的是不是,因为您在 % 的两边都使用通配符( LIKE )关键词。前导(开始)通配符意味着不能使用任何索引来帮助提高搜索速度,因此必须检查每一行是否符合条件。

您可以通过更改为 LIKE 'VALUE%' 来加快速度。反而;至少可以使用索引将被搜索的行限制为以 VALUE 开头的行。 .

关于sql - 改进 Firebird 数据库上的 '% LIKE %' 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9007269/

相关文章:

sql - 如何将变量解析为 dbt 中的源引用?

sql - 仅列出唯一用户

python - 为什么我无法在 ubuntu 12.04 中将 python 连接到 firebird?

delphi - 锁定表 Firebird ,德尔福

sql - 使用 in (select ...) 子句进行查询优化

mysql - 使用连接不返回行选择最大值

MySQL > SSMS 2012 链接服务器 "Requested conversion is not supported."

php - Mysql Join 两个表获取相关数据

java - 使用 HQL 查找最大 id

python - 无法使用 Django 连接到 firebird 数据库