我有一个问题:
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)
答案 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
。