MySQL查询优化:LIMIT 1避免全表扫描提高查询效率

 更新时间:2013年04月19日 15:14:50   作者:  
在某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率,感兴趣的朋友可以了解下哈,希望对你优化mysql查询有所帮助
在某些情况下,如果明知道查询结果只有一个,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 的 21 个规范、优化最佳实践!

    MySQL 的 21 个规范、优化最佳实践!

    每一个好习惯都是一笔财富,本文分 SQL 后悔药,SQL 性能优化,SQL 规范优雅三个方向,分享写 SQL 的 21 个好习惯和最佳实践
    2020-12-12
  • 详解DBeaver连接MySQL8以上版本以及解决可能遇到的问题

    详解DBeaver连接MySQL8以上版本以及解决可能遇到的问题

    这篇文章主要介绍了DBeaver连接MySQL8以上版本以及解决可能遇到的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Windows系统下MySQL无法启动的万能解决方法

    Windows系统下MySQL无法启动的万能解决方法

    这篇文章主要给大家介绍了关于Windows系统下MySQL无法启动的万能解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 定位和优化mysql慢查询的常见方法分享

    定位和优化mysql慢查询的常见方法分享

    MySQL中的慢查询(Slow Query)指执行时间超过指定阈值的查询语句,默认阈值是long_query_time参数设置的秒值,MySQL有几种常见的方法可以发现和获取慢查询,接下来小编将给大家详细的介绍一下这些方法,需要的朋友可以参考下
    2023-08-08
  • MySQL主从同步延迟原因与解决方案

    MySQL主从同步延迟原因与解决方案

    本文主要介绍了MySQL主从同步延迟原因与解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • mysql分表和分区的区别浅析

    mysql分表和分区的区别浅析

    这篇文章主要介绍了mysql分表和分区的区别浅析,并对它们之间的相同做了分析,需要的朋友可以参考下
    2014-07-07
  • MySQL中如何重建表

    MySQL中如何重建表

    这篇文章主要介绍了MySQL中如何重建表问题。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • MYSQL替换时间(年月日)字段时分秒不变实例解析

    MYSQL替换时间(年月日)字段时分秒不变实例解析

    这篇文章主要介绍了MYSQL替换时间(年月日)字段,时分秒不变的实现方法,需要的朋友可以参考下
    2017-07-07
  • MySQL中的空格处理方法

    MySQL中的空格处理方法

    在MySQL中,空格是一个特殊的字符,本文主要介绍了MySQL中的空格处理方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • mysql 5.7.17 winx64安装配置图文教程

    mysql 5.7.17 winx64安装配置图文教程

    这篇文章主要为大家分享了mysql 5.7.17 winx64安装配置方法图文教程,感兴趣的朋友可以参考一下
    2017-01-01

最新评论