mysql仅查询一条数据时的雷区

编程入门 行业动态 更新时间:2024-10-20 20:31:06

mysql仅查询一条数据时的<a href=https://www.elefans.com/category/jswz/34/1720162.html style=雷区"/>

mysql仅查询一条数据时的雷区

场景:有用户表user,有id,email,user_name,mobile等字段,现在要求根据指定email帐号查询一个用户。

乍一看,这个需求简单,不用考虑直接写出了一下sql

select * from user where email='xxx@yyy';

这时,就有可能踩雷了。

分析一下这个雷区,存在以下几种情形:
  • 1.email列没有建立索引

这种情况下,就悲剧了。由于没有索引,即使email的记录不重复,也会全表扫描。

  • 2.email列有普通索引
    这种情况下能避免全表扫描,能用到索引,但是还会继续使用到where条件进行过滤。

  • 3.email列有唯一索引
    这种情况最高效,与where id=xxx几乎一样的效率(前提是id是主键索引)
解决方案

在仅查询一条记录的时候,无论where条件是否有索引有什么样的索引,最好在条件后面加limit 1限制一下。这样就能避免全表扫描,尽可能提高查询的效率。养成这样的意识习惯,就不会踩坑。

select * from user where email='xxx@yyy' limit 1;

原理:当mysql查询时,如果有limit 1限制,查询到满足条件的第一条记录的就返回结果,不会继续查询下去。

特殊情况

假如email列没有索引,且刚好记录在数据表的最后一条,这样limit 1实际上也会全表扫描,这种情况下就最好考虑给email列加索引。

转载于:

更多推荐

mysql仅查询一条数据时的雷区

本文发布于:2024-03-08 23:42:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722883.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:雷区   数据   mysql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!