在某些情况下,如果明知道查询结果只有一个,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 sSELECT * FROM t_user WHERE email="222@xxg.com" LIMIT 1; 耗时0.00 s MySQL查询优化:用子查询代替非主键连接查询Oracle 静默安装简要的注意事项相关资讯 MySQL查询优化
- MySQL查询优化:profile功能 (05/18/2015 08:56:56)
- MySQL不支持子查询优化一例 (08/29/2014 21:29:25)
- MySQL查询优化-Show命令 (03/23/2013 08:13:36)
| - MySQL 索引及查询优化 (04/25/2015 11:01:57)
- MySQL查询优化:用子查询代替非主键 (03/30/2013 12:36:37)
|
本文评论 查看全部评论 (0)