[英]Limited SQL query returns all rows instead of one
我嘗試了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**
您知道為什么查詢將遍歷所有行而不是僅選擇第一行嗎? 我可以在查詢中(或在我的表中)更改什么以減少類似結果的行數?
顯示的行數只是要檢查的行數的估計值 。 它並不總是等於運行查詢時檢查的實際行數。
特別是:
估計行數時不考慮LIMIT即使您有LIMIT來限制要檢查的行數,MySQL仍會打印全數。
當查詢實際運行時,將僅檢查一行。
編輯為使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.