5

我尝试了 SQL 代码:

explain SELECT * FROM myTable LIMIT 1

结果我得到:

id select_type table   type possible_keys key  key_len ref  **rows**
1  SIMPLE      myTable ALL  NULL          NULL NULL    NULL **32117**

你知道为什么查询会运行所有行而不是简单地选择第一行吗?我可以在查询(或我的表)中更改什么以减少类似结果的行数?

4

2 回答 2

5

显示的行数只是要检查的行数的估计值。它并不总是等于运行查询时检查的实际行数。

尤其:

估计行数时不考虑 LIMIT 即使您有限制检查行数的 LIMIT,MySQL 仍然会打印完整的行数。

来源

当查询实际运行时,只会检查一行。

于 2012-11-14T18:23:26.253 回答
0

编辑使用子选择:

假设主键是 "my_id" ,使用WHERE. 例如:

select * from mytable
where my_id = (
select max(my_id) from mytable
)

虽然一开始这似乎效率较低,但结果在解释中是这样的,导致只返回一行并读取索引以找到最大值。我不建议对 MySQL 中的分区表执行此操作:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   PRIMARY mytable const   PRIMARY PRIMARY 4   const   1    
2   SUBQUERY    NULL    NULL    NULL    NULL    NULL    NULL    NULL    Select tables optimized away
于 2012-11-14T18:21:54.330 回答