`
uule
  • 浏览: 6359188 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Mysql - LIMIT 1避免全表扫描

 
阅读更多

1、MYSQL中LIMIT用法_百度知道

limit是mysql的语法select * from table limit m,n

其中m是指记录开始的index,从0开始,表示第一条是指从第m+1条开始,取n条

 

select * from tablename limit 2,4即取出第3条至第6条,4条记录

 

2、mysql求前几条数据之和:

错误方法:

SELECT sum(stats_unique_unique) from t_stats where fk_site = 9 order by stats_date desc limit 0, 2;

 正确方法(使用子查询):

select sum(stats_unique_unique)
from
(SELECT stats_unique_unique from t_stats where fk_site = 9 limit 0, 7) a; 

 http://www.experts-exchange.com/Database/MySQL/Q_22623462.html

 

 

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

 

 

 

作者:叉叉哥   转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/8726272

分享到:
评论

相关推荐

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

    在某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率。 例如下面的用户表(主键id,邮箱,密码): 代码如下: create table t_user( id int primary key auto_increment, email varchar(255)...

    mysql-win32

    2. 查询优化:避免全表扫描,使用LIMIT限制返回结果数量,减少JOIN操作,优化WHERE子句。 3. 参数调整:根据实际负载调整MySQL配置文件中的参数,如max_connections、innodb_buffer_pool_size等。 4. 数据库设计:...

    ---Mysql---

    2. 查询优化:理解EXPLAIN计划可以帮助分析查询性能,通过避免全表扫描、减少JOIN操作、合理使用索引和预编译语句,可以显著提升查询效率。 四、事务处理 MySQL支持ACID(原子性、一致性、隔离性和持久性)特性,...

    mysql中limit的用法深入分析

    - **避免全表扫描**:尽量确保`ORDER BY`子句中的列有索引,以避免全表扫描。无索引的`ORDER BY`会导致性能急剧下降。 - **子查询优化**:如果`LIMIT`用于筛选满足特定条件的记录,考虑先使用`WHERE`子句过滤,然后...

    mysql delete limit 使用方法详解

    3. **避免全表扫描**:尽量避免无条件的`DELETE`,因为它会导致全表扫描。 4. **事务处理**:将`DELETE`操作封装在事务中,以便在出现问题时可以回滚。 `COUNT()`和`SUM()`是两个常用的聚合函数。`COUNT()`返回非...

    基于Mysql数据库的SQL优化

    - **避免全表扫描**:尽可能地使用索引减少全表扫描。 - **避免NULL值判断**:使用非空约束或特定值替代`NULL`,以减少查询时的复杂性。 - **避免使用!=或操作符**:这些操作符通常会导致索引失效。 - **避免使用OR...

    MySQL用limit方式实现分页的实例方法

    - **避免全表扫描**:使用索引可以避免全表扫描,减少I/O操作。 - **减少`ORDER BY`**:尽量减少不必要的排序,尤其是在大量数据上。 - **选择合适的分页大小**:过大的分页可能导致内存压力,过小则增加网络传输...

    MySQL优化大揭秘.rar

    - **避免全表扫描**:尽量避免使用SELECT *,只选择需要的列,减少I/O操作。 - **使用EXPLAIN分析查询**:理解查询执行计划,找出可能导致全表扫描或使用不恰当索引的查询。 2. **SQL语句优化**: - **避免在...

    MySQL数据库表优化最佳实践.docx

    - 避免NULL判断:避免在WHERE子句中对字段进行NULL值判断,可能导致全表扫描。 - 稀疏字段:值分布稀少的字段不宜建立索引。 - 前缀索引:字符字段只建立前缀索引。 - 多列索引:注意顺序,删除不必要的单列索引...

    Mysql 专项面试题及答案.rar

    - **查询优化**:避免全表扫描,使用WHERE子句过滤不必要的数据,合理使用JOIN操作,减少子查询,考虑使用临时表。 - **索引优化**:合理创建主键和唯一键,为经常出现在WHERE条件中的列创建索引,避免在索引字段...

    MySql从零开始学-必知必会

    3. 索引失效:避免在索引列上使用函数,避免全表扫描,合理设计索引。 五、存储引擎 1. InnoDB与MyISAM:对比这两种常用的存储引擎,了解它们在事务处理、并发控制、存储方式上的差异。 2. 其他引擎:如Memory用于...

    MySQL千万级大表深度分页为什么慢,以及优化的方法、原理

    这是因为MySQL的查询优化器在面对大量数据的分页请求时,可能选择全表扫描而不是利用索引来提高效率。这个问题在描述中的例子中得到了体现,当尝试获取数据集的远端分页时,查询速度显著降低。 1. **分页查询原理:...

    mysql性能优化视频教程

    2. **避免使用ORDER BY + LIMIT组合**:这种组合会导致全表扫描。 3. **使用索引辅助分页**:通过在排序字段上建立索引来提高分页效率。 4. **优化分页逻辑**:例如使用基于偏移量的分页或基于游标的分页。 #### 四...

    java-web-mysql 分页demo

    2. 避免全表扫描:避免在OFFSET部分使用大数值,这可能导致全表扫描,降低性能。 3. 分页参数校验:确保用户输入的页码和每页大小在合理范围内,防止SQL注入。 4. 前后端分离:若采用前后端分离架构,前端需处理分页...

    mysqlser 和mysql两种版本的分页java代码

    1. 分页效率:避免全表扫描,利用索引提高查询速度。 2. 安全性:使用`PreparedStatement`防止SQL注入攻击。 3. 异常处理:确保捕获并适当地处理可能出现的`SQLException`。 4. 连接管理:及时关闭数据库连接和结果...

    MySQL分页实现

    - **避免全表扫描**:如果可能,使用`IN`子查询或`JOIN`代替`OFFSET`,以减少全表扫描。 - **预估页数**:在用户滚动到底部加载更多数据时,可以提前计算出下一页的ID范围,减少不必要的查询。 4. **MySQL分页工具*...

    传智播客mysql的sql优化

    - **避免全表扫描**:通过合理使用索引,避免对大表进行全表扫描,减少I/O操作,提高查询速度。 - **使用EXPLAIN分析查询**:学习使用EXPLAIN命令来查看查询执行计划,分析查询效率,找出可能的瓶颈。 - **优化...

    大牛讲解的MySQL介绍及性能优化 PPT

    - 查询优化:避免全表扫描,合理使用LIMIT,减少子查询,优化JOIN操作。 - 表设计:范式理论,选择合适的数据类型,避免冗余数据,合理拆分大表。 5. 存储引擎: - InnoDB与MyISAM:比较两者在事务处理、行级...

Global site tag (gtag.js) - Google Analytics