我尝试了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**
你知道为什么查询会运行所有行而不是简单地选择第一行吗? 我可以在查询(或我的表格)中更改哪些内容以减少类似结果的行数?
答案 0 :(得分:5)
显示的行数只是要检查的行数的估计值。它并不总是等于运行查询时检查的实际行数。
特别是:
估算行数时不考虑LIMIT即使你有LIMIT限制将检查多少行,MySQL仍然会打印完整的数字。
当查询实际运行时,只会检查一行。
答案 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