【问题标题】:Mysql: impossible where noticed after reading const tablesMysql:在阅读 const 表后注意到的地方不可能
【发布时间】:2017-01-26 21:17:11
【问题描述】:

我有一个查询:

SELECT l.id, title 
FROM (SELECT id 
      FROM news 
      WHERE (title LIKE '%football predictions argentina%' OR text LIKE '%football predictions argentina%') 
             AND lang = 'en' 
             AND STATUS = 1 
      ORDER BY id LIMIT 0, 10)  
o JOIN news l ON l.id = o.id 
WHERE 1 
ORDER BY date DESC 
LIMIT 0, 10;

explain 命令告诉我:在阅读 const 表后注意到的地方不可能

不幸的是,我无法弄清楚这意味着什么以及如何解决它?

表格的结构是这样的:

id      int(10) 
title   varchar(255)    
text    text    
image   varchar(255)    
lang    varchar(3)  
date    date    
status  smallint(1) 

除了 id - 主键我有一个组合索引(语言、状态、日期)

【问题讨论】:

  • 能否请您提供表结构?并且更多的是,您需要多个 id 进行选择查询,该 id 表是否创建?
  • 您没有在子查询中选择标题?
  • @MathsRkBala 我不明白你问题的第二部分?
  • 什么是新闻表,新闻表的“id”字段是表名。对吗?
  • 表名为“news”,该表的主键为“id”

标签: mysql


【解决方案1】:

除了Shadow的回答,MySQL的解释会显示:
Impossible WHERE noticed after reading const tables
当非索引字段上的 where 条件与索引字段上匹配的 where 条件不匹配时。

当索引字段上的 where 条件不匹配时,它将显示
no matching row in const table

【讨论】:

    【解决方案2】:

    “在阅读 const 表后不可能注意到”是有点令人困惑的消息。这基本上意味着您的其中一个条件与任何记录都不匹配,因此 MySQL 优化器无法(不想......)继续进一步分析查询。它只是简单地返回一个空的结果集。

    修复非常简单:确保使用确实返回结果集的 where 子句测试说明。

    MySQL 有一个开放的feature request 要求将消息更改为更有意义的消息,但我认为他们从来没有打扰过。

    【讨论】:

    • 谢谢@Shadow!
    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 2013-02-03
    • 2016-10-05
    • 2023-03-07
    • 2016-02-14
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    相关资源
    最近更新 更多