Mysql:读取const表后不可能注意到的地方

时间:2016-09-19 08:41:58

标签: mysql

我有一个问题:

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 - 主键我有一个组合索引(lang,status,date)

2 个答案:

答案 0 :(得分:0)

“读取const表后注意到的地方不可能”是有点令人困惑的消息。它基本上意味着你的哪个标准与任何记录都不匹配,因此MySQL优化器不能(不想......)继续进一步分析查询。它只是返回一个空的结果集。

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

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

答案 1 :(得分:0)

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

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