Statemtent:
SELECT *
FROM `announcements`
WHERE `website` = 17
AND `visible_date` <= '2014-08-05'
ORDER BY `visible_date` DESC
LIMIT 1
我希望第一个announcement
拥有visible_date
收件人而不是2014-08-05。有没有更好的方法呢?
现在,如果我有索引(website, visible_date)
,我猜MySQL可以使用索引获取第一行而不进行表扫描。
但我rows
中的EXPLAIN
列显示355行而不是1行。
感谢您的帮助。
答案 0 :(得分:0)
你是对的,拥有索引会提高查询的性能但是EXPLAIN
命令会显示执行计划(如下所述:EXPLAIN)。
为了获得结果,MySQL首先需要选择与WHERE
子句相对应的行,然后它只返回第一个结果(LIMIT 1
)。
这就是EXPLAIN
显示每个匹配结果的原因,LIMIT
语句应用于符合条件的结果。
索引用于更快地查找行但不会过滤表格的数据,您可以在此处找到有关索引的更多信息:MySQL Indexes
希望这个解释能帮助你更好地理解索引的概念。