服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|

服务器之家 - 数据库 - Mysql - MySQL查询优化:LIMIT 1避免全表扫描提高查询效率

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

2019-12-21 16:43MYSQL教程网 Mysql

在某些情况下,如果明知道查询结果只有一个,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,查询优化,LIMIT

延伸 · 阅读

精彩推荐
  • Mysqlmysql 教程 存储过程

    mysql 教程 存储过程

    最近用mysql + asp.net来写网站,既然mysql已经支持存储过程了,那么像分页这么常用的东西,当然要用存储过程啦 ...

    mysql教程网2422019-10-29
  • MysqlMySQL约束类型及举例介绍

    MySQL约束类型及举例介绍

    今天小编就为大家分享一篇关于MySQL约束类型及介绍的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来...

    no-961722019-06-19
  • MysqlMYSQL基础之连接MYSQL、修改密码、添加用户

    MYSQL基础之连接MYSQL、修改密码、添加用户

    在这篇文章中我们就从连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令。 ...

    mysql教程网3612019-10-24
  • MysqlMySQL 数据库设计复习笔记及项目实战

    MySQL 数据库设计复习笔记及项目实战

    参考的数据库文档主要有:目前国内的常见的PHP系统的数据库 ...

    杨鑫奇1652019-11-06
  • MysqlMysql表的七种类型详细介绍

    Mysql表的七种类型详细介绍

    Mysql表类型都有哪些是一定需要知道的,下面就为您介绍七种Mysql表类型,希望能对您学习Mysql表类型有所帮助,需要的朋友可以了解下 ...

    MYSQL技术网1302019-12-13
  • MysqlMYSQL插入处理重复键值的几种方法

    MYSQL插入处理重复键值的几种方法

    当unique列在一个UNIQUE键上插入包含重复值的记录时,默认insert的时候会报1062错误,MYSQL有三种不同的处理方法,下面我们分别介绍。 ...

    MYSQL教程网1852019-12-08
  • Mysql比较详细的MySQL字段类型说明

    比较详细的MySQL字段类型说明

    MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的...

    mysql教程网2392019-10-24
  • MysqlMySQL 5.7并发复制隐式bug实例分析

    MySQL 5.7并发复制隐式bug实例分析

    这篇文章主要给大家介绍了关于MySQL 5.7并发复制隐式bug的相关资料,文中介绍的非常详细,对大家学习或者使用mysql5.7具有一定的参考学习价值,需要的朋...

    Rangle2742019-06-16