为什么在SQL查询中使用LIMIT 1会降低查询效率?
- 内容介绍
- 文章标签
- 相关推荐
LIMIT 1到底是好兄弟还是坑爹的“黑马”?
先说个事儿,咱们写SQL经常会加上LIMIT 1。
试试水。 想想看,查询只要一条记录,直接把它截下来多省事儿。
恕我直言... 但有时候,这招不但不快,还能把查询拖慢好几倍。
别急,咱慢慢拆开聊,看看背后到底藏了啥“暗流”,冲鸭!。
一、 别把LIMIT 1当成万能钥匙
扎心了... 你以为只要加了LIMIT 1数据库就会立马停下来。
其实它先得决定走哪条索引路。
优化器是个“赌徒”,它会算成本,然后选最便宜的那条,冲鸭!。
在我看来... 这时候, 如果它挑的路本来就不适合,你给它加个LIMIT 1反而让它更坚定地走那条“弯路”。
二、 案例:时间索引的“自杀式”扫描
我倾向于... 假设有张订单表,500万行数据,有两个关键索引:
user_idcreate_time
业务需求是:找某用户最近一笔“处理中”的订单。
直觉告诉我们, 用user_id定位,再按时间倒序排,就能马上拿到第一条,被割韭菜了。。
可是 加了LIMIT 1之后优化器觉得:“只要一条,我从最新时间往回扫。”,看好你哦!
后来啊:
- 它先走create_time索引,从今天往前翻,看好你哦!。
LIMIT 1到底是好兄弟还是坑爹的“黑马”?
先说个事儿,咱们写SQL经常会加上LIMIT 1。
试试水。 想想看,查询只要一条记录,直接把它截下来多省事儿。
恕我直言... 但有时候,这招不但不快,还能把查询拖慢好几倍。
别急,咱慢慢拆开聊,看看背后到底藏了啥“暗流”,冲鸭!。
一、 别把LIMIT 1当成万能钥匙
扎心了... 你以为只要加了LIMIT 1数据库就会立马停下来。
其实它先得决定走哪条索引路。
优化器是个“赌徒”,它会算成本,然后选最便宜的那条,冲鸭!。
在我看来... 这时候, 如果它挑的路本来就不适合,你给它加个LIMIT 1反而让它更坚定地走那条“弯路”。
二、 案例:时间索引的“自杀式”扫描
我倾向于... 假设有张订单表,500万行数据,有两个关键索引:
user_idcreate_time
业务需求是:找某用户最近一笔“处理中”的订单。
直觉告诉我们, 用user_id定位,再按时间倒序排,就能马上拿到第一条,被割韭菜了。。
可是 加了LIMIT 1之后优化器觉得:“只要一条,我从最新时间往回扫。”,看好你哦!
后来啊:
- 它先走create_time索引,从今天往前翻,看好你哦!。

