有限的SQL查询返回所有行而不是一行

时间:2012-11-14 18:19:26

标签: mysql select limit

我尝试了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**

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

2 个答案:

答案 0 :(得分:5)

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

特别是:

  

估算行数时不考虑LIMIT即使你有LIMIT限制将检查多少行,MySQL仍然会打印完整的数字。

Source

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

答案 1 :(得分:0)

编辑使用subselect:

假设主键是“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