【发布时间】:2015-11-20 06:35:23
【问题描述】:
请帮助我调整以下查询的性能或建议任何替代逻辑。
Select FNAME, MNAME, SURNAME, DOB, ADDRESS, PHONE
from INDIVIDUAL_DATA
WHERE DOB = V_DOB
AND (SURNAME = V_SURNAME
OR (SURNAME LIKE '%' || ' ' || V_SURNAME)
OR (SURNAME LIKE V_SURNAME || ' ' || '%')
OR (SURNAME LIKE '%' || ' ' ||
V_SURNAME || ' ' || '%'));
V_SURNAME 是具有姓氏输入的变量,而 V_DOB 具有 DOB(出生日期)的输入。 我使用 SURNAME 和 DOB 列创建了一个索引。 此查询是存储过程的一部分。并且此查询将是调用存储过程时执行的第一个查询。
我在 DB2 数据库中有大约 700 万条记录,将在这些记录上执行此查询。我们正面临性能问题,这需要很长时间。我怀疑是因为带有 OR 运算符的 Like Predicate 是问题的原因。 实现此逻辑以执行模式搜索。请查看以下测试用例:
案例一。
DOB= 1992-10-10 and SURNAME = 'ALEX MATHEWS'
V_DOB = '1992-10-10' and SURNAME = 'ALEX'
这应该找到一个肯定的匹配。
案例2。
DOB= 1965-05-10 and SURNAME = 'FRANKLIN JERRY'
V_DOB = '1965-05-10' and V_SURNAME = 'FRANK'
这不应该被提取。这是一个否定的例子。
【问题讨论】:
标签: sql db2 pattern-matching sql-like sql-tuning