【问题标题】:When i use the "Like" operator, Access database hangs?当我使用“Like”运算符时,Access 数据库挂起?
【发布时间】:2012-08-13 05:15:03
【问题描述】:

当我使用 Like 时,访问卡住

SELECT ox.*, '+++++++++++' AS judo, sh2.*
FROM OXUS AS ox INNER JOIN Sheet2 AS sh2 ON sh2.ID_P LIKE "*" & ox.ID_P;

如果我使用

SELECT ox.*, '+++++++++++' AS judo, sh2.*
FROM OXUS AS ox INNER JOIN Sheet2 AS sh2 ON sh2.ID_P=ox.ID_P;

立即打开。

【问题讨论】:

  • 使用通配符作为 like: stackoverflow.com/a/20538/1370425 的第一部分的性能问题:本质上,它必须在没有索引优势的情况下进行完整搜索

标签: sql ms-access ms-access-2010


【解决方案1】:

在这种情况下,您可以使用隐式连接,即 WHERE:

SELECT DISTINCT ox.P_ID, '+++++++++++' AS judo, sh2.P_ID
FROM OXUS AS ox, Sheet2 AS sh2
WHERE Instr(sh2.P_ID, ox.P_ID)>0

但是,它只对查找行有用。

【讨论】:

  • “Instr”为我工作。但是查询确实有点慢。
【解决方案2】:

第一个语句是基于匹配 id 的表之间的直接连接。我怀疑也涉及一个索引。 第二个语句是基于使用通配符来检查连接到 ID 上的所有内容(!)来连接表。它也可以根据类型从 int 转换为 varchar .... 全部不使用索引。

Like 语句的成本总是更高,因为它们必须单独检查特定匹配的列内容。不建议将它们用作连接的一部分。

我认为这是对真正问题的缩减,因为 like 语句没有意义。

你想达到什么目的?

【讨论】:

  • ID-P - 是护照号码(Varchar)。我想在护照旁边的 2 个表中找到相同的客户
  • 请注意,字符串末尾有通配符将使用索引
  • 亲爱的,我无法解决这个问题,与 t-sql 相同的问题,但我在 t-sql 中使用函数。谢谢你。
猜你喜欢
  • 2022-06-21
  • 2011-07-08
  • 2021-02-21
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 2016-01-27
相关资源
最近更新 更多