MySQL 查询优化: LIMIT 1 避免全表扫描提高查询效率
发布日期:2021-11-30 16:49:57
浏览次数:6
分类:技术文章
本文共 903 字,大约阅读时间需要 3 分钟。
原文:
在某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率。
例如下面的用户表(主键id,邮箱,密码):
create table t_user(id int primary key auto_increment,email varchar(255),password varchar(255));每个用户的email是唯一的,如果用户使用email作为用户名登陆的话,就需要查询出email对应的一条记录。 SELECT * FROM t_user WHERE email=?; 上面的语句实现了查询email对应的一条用户信息,但是由于email这一列没有加索引,会导致全表扫描,效率会很低。 SELECT * FROM t_user WHERE email=? LIMIT 1; 加上LIMIT 1,只要找到了对应的一条记录,就不会继续向下扫描了,效率会大大提高。 LIMIT 1适用于查询结果为1条(也可能为0)会导致全表扫描的的SQL语句。 如果email是索引的话,就不需要加上LIMIT 1,如果是根据主键查询一条记录也不需要LIMIT 1,主键也是索引。 例如: SELECT * FROM t_user WHERE id=?; 就不需要写成: SELECT * FROM t_user WHERE id=? LIMIT 1; 二者效率没有区别。 附上我做的实验: 存储过程生成100万条数据:
BEGINDECLARE i INT;START TRANSACTION;SET i=0;WHILE i<1000000 DOINSERT INTO t_user VALUES(NULL,CONCAT(i+1,'@xxg.com'),i+1);SET i=i+1;END WHILE;COMMIT;END查询语句
SELECT * FROM t_user WHERE email='222@xxg.com'; 耗时0.56 sSELECT * FROM t_user WHERE email='222@xxg.com' LIMIT 1; 耗时0.00 s
转载地址:https://leeguoren.blog.csdn.net/article/details/51725951 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月16日 06时30分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
WEB攻击手段及防御第2篇-SQL注入
2019-04-28
WEB攻击手段及防御第3篇-CSRF
2019-04-28
WEB攻击手段及防御-扩展篇
2019-04-28
spring bean初始化及销毁你必须要掌握的回调方法。
2019-04-28
mysql语句性能开销检测profiling详解
2019-04-28
hashCode到底有什么用?
2019-04-28
设计模式之动态代理模式实战
2019-04-28
设计模式之静态代理模式实战
2019-04-28
作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VO
2019-04-28
mysql查询优化explain命令详解
2019-04-28
常用加密算法解析
2019-04-28
设计模式之单例模式实践
2019-04-28
彻底理解正向代理和反向代理
2019-04-28
一次频繁Full GC的排查过程,根源居然是它...
2019-04-28
Unicode与UTF-8的区别
2019-04-28
最长回文子串(Longest Palindromic Substring)
2019-04-28
Windows 通过 SecureCRT 8.x 上传文件到Linux服务器
2019-04-28
Spring MVC的GET与POST请求url-pattern坑
2019-04-28
<table/>默认适应内容宽度造成滚动条不显示的解决方法
2019-04-28
【爬虫】简单十行代码爬取B站的B站弹幕
2019-04-28