`
uule
  • 浏览: 6322791 次
  • 性别: 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 Limit查询性能的方法详解

    在MySQL数据库操作中,我们在做一些查询的时候总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的。其实我们可以使用Limit关键字来避免全表扫描的情况,从而提高...

    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用于...

    java-web-mysql 分页demo

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

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

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

    MYSQL使用手册MYSQL使用手册

    - 查询优化:编写高效的SQL语句,避免全表扫描,合理使用索引。 - 表设计优化:合理选择数据类型,避免数据冗余,使用合适的数据分区策略。 - 服务器配置优化:调整内存分配、并发连接数等参数,提高服务器性能。...

    MySQL分页实现

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

    传智播客mysql的sql优化

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

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

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

    PostgreSQL 8.2,Oracle 10g,SQL Server 2005,MYSQL 5.1 脚本规范

    2. **性能优化**:了解如何编写高效的查询,如正确使用索引、避免全表扫描和减少临时表的使用,是提高数据库性能的关键。 3. **安全性**:在脚本中实施权限控制和数据加密,以保护数据库免受未授权访问和潜在的数据...

    mysql数据库实现分页

    1. **避免全表扫描**:尽量使用索引,尤其是在`WHERE`子句中的字段,以提高查询效率。 2. **减少`OFFSET`的使用**:`OFFSET`值越大,查询性能越低,因为数据库需要跳过更多的记录。尽量减少页面跳转或使用其他策略...

    MySQL中级面试题汇总

    - 避免全表扫描和范围查询。 8. **SQL查询优化**: - 使用EXPLAIN分析查询计划,优化索引使用。 - 减少JOIN操作,避免笛卡尔积。 - 使用LIMIT限制返回结果的数量。 9. **删除索引**: - 使用DROP INDEX语句,...

    MySQL高级_思维导图

    - **WHERE子句优化**:避免全表扫描,使用索引,限制查询条件的数量。 - **JOIN操作优化**:减少JOIN的表数量,使用索引,合理设计JOIN顺序。 - **GROUP BY和ORDER BY**:避免大范围排序,考虑使用索引,合理设计...

    MySQL百万级数据量分页查询方法及其优化建议

    5. **利用索引快速定位**:如`SELECT * FROM table WHERE pk &gt;= 1000 ORDER BY pk ASC LIMIT 0, 20`,直接根据主键或唯一键的值来定位数据,避免全表扫描。 6. **子查询或连接利用索引**:例如,通过子查询或连接...

    MySql5.0使用手册

    - 表设计优化:合理设计表结构,避免全表扫描。 - 索引策略:根据查询模式创建合适的索引。 15. **复制与集群** - 数据库复制:实现主从同步,提高可用性和容错性。 - MySQL集群:通过多服务器分担负载,提供高...

Global site tag (gtag.js) - Google Analytics