【问题标题】:Does rows in mysql explain mean that the table is not properly indexed?mysql中的行解释是否意味着表没有正确索引?
【发布时间】:2014-09-17 09:06:13
【问题描述】:

声明:

SELECT * 
FROM `announcements` 
WHERE `website` = 17 
    AND `visible_date` <= '2014-08-05' 
ORDER BY `visible_date` DESC 
LIMIT 1

我想在 2014 年 8 月 5 日之前获得第一个具有 visible_dateannouncement。有没有更好的方法?

现在,如果我有一个索引(website, visible_date),我猜 MySQL 可以使用索引获取第一行,而无需进行表扫描。

但我的 EXPLAIN 中的 rows 列显示 355 行而不是 1 行。

感谢您的帮助。

【问题讨论】:

  • @Satya 它们是等价的,只是同一事物的语法不同。
  • @Satya Barmar 说得对,没有帮助。

标签: mysql sql explain


【解决方案1】:

您是对的,拥有索引会提高您的查询性能,但 EXPLAIN 命令向您显示执行计划(如此处所述:EXPLAIN)。

为了得到你的结果,MySQL首先需要选择与你的WHERE子句对应的行,然后它将只返回第一个结果(LIMIT 1)。

这就是 EXPLAIN 显示每个匹配结果的原因,LIMIT 语句应用于匹配您的条件的结果。

索引用于更快地查找行,但不会过滤表中的数据,您可以在此处找到有关索引的更多信息:MySQL Indexes

希望这个解释能帮助你更好地理解索引的概念。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 2015-06-21
    • 2022-09-23
    • 2016-05-16
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多