【问题标题】:Cannot join two tables using indexes无法使用索引连接两个表
【发布时间】:2011-03-10 19:10:24
【问题描述】:

我只是无法让表索引在此表连接中使用自己:

explain select n.* from npi n,npi_taxonomy nt where n.NPI=nt.NPI_CODE;

这是我得到的解释的输出:

如您所见,它在 possible_keys 列中找到键,但键列为空。请帮忙。

【问题讨论】:

  • 这通常意味着您在 NPI_CODE 中没有与 NPI 匹配的任何内容。您确定表 npi_taxonomy 不为空吗?

标签: mysql indexing query-optimization


【解决方案1】:

您的查询命中了表 NPI 中的所有行,并且您从中选择了所有列。
为什么要让 MySQL 在该表上使用索引?

我相当肯定,如果您只在选择列表中包含 npi 列,您将获得所需的行为。

【讨论】:

    【解决方案2】:

    为什么不使用显式连接

    SELECT n.* FROM npi n  
    INNER JOIN npi_taxomoty nt ON (n.NPI = nt.NPI_CODE)
    

    或使用左连接:

    SELECT n.* FROM npi n
    LEFT JOIN npi_taxomoty nt ON (n.NPI = nt.NPI_CODE)
    

    如果第一个查询返回 no 结果,但第二个返回,则 n.NPI 和 nt.NPI_CODE 之间没有匹配项。

    顺便说一句,我觉得奇怪的是,你会给一个字段 (NPI) 赋予一个与表 (npi) 相同的名称。很混乱。

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多