在某些情况下,如果明知道查询结果只有一个,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万条数据:

BEGIN
DECLARE i INT;
START TRANSACTION;
SET i=0;
WHILE i<1000000 DO
 INSERT 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 s

SELECT * FROM t_user WHERE email='222@xxg.com' LIMIT 1; 耗时0.00 s

MySQL查询优化:LIMIT 1避免全表扫描相关推荐

  1. mysql没加引号导致全表扫描_mysql隐蔽的索引规则导致数据全表扫描

    索引是为了加速数据的检索,但是不合理的表结构或适应不当则会起到反作用.我们在项目中就遇到过类似的问题,两个十万级别的数据表,在做连接查询的时候,查询时间达到了7000多秒还没有查出结果. 首先说明,关 ...

  2. mysql limit会扫描全表_为什么用了limit还会进行全表扫描?

    你的位置: 问答吧 -> PHP -> 问题详情 为什么用了limit还会进行全表扫描? 现有一张100万行记录的表test, 执行以下语句后: explain   select   * ...

  3. 范围查找(比如日期范围)下查询出现全表扫描MySQL数据库索引失效

    范围查找(比如日期范围)下查询出现全表扫描MySQL数据库索引失效 当下MySQL数据库在多款数据库中脱颖而出,成为使用最广泛的数据库之一,这里我们来看看数据库索引上的一个问题.我们知道在数据量上去以 ...

  4. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  5. MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)

    MYSQL避免全表扫描 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.应尽量避免在 where 子句中对字段进行 null 值判断,否 ...

  6. mysql in和or扫描全表_MySQL对OR条件查询不支持优化,会进行全表扫描

    MySQL对OR条件查询不支持优化,会进行全表扫描:explain extended select * from like1 where name like 'abc%';例如:+----+----- ...

  7. mysql in 子查询无法使用索引全表扫描 慎用in

    背景 最近慢sql 性能优化 发现一个调用频率高的sql 使用 in 子查询,导致外层全表扫描的问题? 为什么会产生这样的问题?特别强调在优化的使用发现 使用in 和优化后的效果差距 300倍,可见全 ...

  8. 33 | MySQL全表扫描会将内存打爆?(看了这篇你就赚)

    一.前言 本篇主要分析全表扫描对server层.引擎层的影响. 二.全表扫描对server层的影响 2.1.server端对结果集的保存流程是什么样的?MySQL 是"边读边发的" ...

  9. 深入理解为什么MySQL全表扫描很慢?

    在InnoDB的数据页到底长什么样?这篇文章里,我们讲了InnoDB数据页长什么样,简单回顾下. 图1 InnoDB数据页结构示意图(图片来自网络) 其中有的部分没有详细讲解,因为暂时还用不到.比如P ...

最新文章

  1. openlayers之style符号化
  2. 'cross-env' 不是内部或外部命令,也不是可运行的程序
  3. spring boot mybatis 整合_MyBatis学习:MyBatis和Spring整合
  4. [css] 你有用过弹性布局吗?说说你对它的理解
  5. C/C++语言函数学习(4)字符串处理函数
  6. inl和dnl matlab_请问如何用matlab仿真它的性能, 比如 INL, DNL, SFDR,EOB等等。
  7. 十五、新人成才之路《做人七项原则 做一个有爱心的人》
  8. vue-router: 路由传参
  9. php 依赖注入 数据库切换_PHP依赖注入(DI)和控制反转(IoC)详解
  10. win10系统镜像下载及在VMware虚拟机上创建win10虚拟机
  11. Excel图表数跨行选择数据
  12. ffmpeg压制视频命令及常用转码参数解析
  13. 医学病理图像:细胞间质与间质细胞的区别
  14. iOS 18位社会信用代码验证
  15. 基于javaweb的学生综合素质评价系统(java+ssm+thymeleaf+layui+mysql)
  16. STM32掌机教程7,演奏音乐
  17. SSRF 攻击PHP-FPM(FastCGI 攻击):学习总结仅供参考
  18. 整理10种电脑截图工具(附带下载地址)
  19. Missing artifact com.oracle:ojdbc7:jar:10.2.0.7.0
  20. 斯坦福博士李纪为成立 AI 金融公司香侬科技,获红杉中国数千万天使投资

热门文章

  1. 继承ViewGroup研究(汇总) 一、二、三
  2. 计算路由汇总的方法(CIDR)
  3. Ubuntu Server 16升級到Ubuntu Server 18操作步驟
  4. Vue 组件库 HeyUI@1.17.0 发布,新增 Skeleton 组件
  5. 用Python建立最简单的web服务器
  6. Slog42_支配vue框架初阶项目之博客网站-单页-默认头像的布局和定位
  7. Java练习:用IF()进行数字排序
  8. 动态路由协议RIP的基本原理与配置
  9. java--迭代(一)Iterator和Iterable接口
  10. Python实例浅谈之五Python守护进程和脚本单例运行