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
相关推荐
在某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率。 例如下面的用户表(主键id,邮箱,密码): 代码如下: create table t_user( id int primary key auto_increment, email varchar(255)...
2. 查询优化:避免全表扫描,使用LIMIT限制返回结果数量,减少JOIN操作,优化WHERE子句。 3. 参数调整:根据实际负载调整MySQL配置文件中的参数,如max_connections、innodb_buffer_pool_size等。 4. 数据库设计:...
2. 查询优化:理解EXPLAIN计划可以帮助分析查询性能,通过避免全表扫描、减少JOIN操作、合理使用索引和预编译语句,可以显著提升查询效率。 四、事务处理 MySQL支持ACID(原子性、一致性、隔离性和持久性)特性,...
- **避免全表扫描**:尽量确保`ORDER BY`子句中的列有索引,以避免全表扫描。无索引的`ORDER BY`会导致性能急剧下降。 - **子查询优化**:如果`LIMIT`用于筛选满足特定条件的记录,考虑先使用`WHERE`子句过滤,然后...
3. **避免全表扫描**:尽量避免无条件的`DELETE`,因为它会导致全表扫描。 4. **事务处理**:将`DELETE`操作封装在事务中,以便在出现问题时可以回滚。 `COUNT()`和`SUM()`是两个常用的聚合函数。`COUNT()`返回非...
- **避免全表扫描**:尽可能地使用索引减少全表扫描。 - **避免NULL值判断**:使用非空约束或特定值替代`NULL`,以减少查询时的复杂性。 - **避免使用!=或操作符**:这些操作符通常会导致索引失效。 - **避免使用OR...
- **避免全表扫描**:使用索引可以避免全表扫描,减少I/O操作。 - **减少`ORDER BY`**:尽量减少不必要的排序,尤其是在大量数据上。 - **选择合适的分页大小**:过大的分页可能导致内存压力,过小则增加网络传输...
- **避免全表扫描**:尽量避免使用SELECT *,只选择需要的列,减少I/O操作。 - **使用EXPLAIN分析查询**:理解查询执行计划,找出可能导致全表扫描或使用不恰当索引的查询。 2. **SQL语句优化**: - **避免在...
- 避免NULL判断:避免在WHERE子句中对字段进行NULL值判断,可能导致全表扫描。 - 稀疏字段:值分布稀少的字段不宜建立索引。 - 前缀索引:字符字段只建立前缀索引。 - 多列索引:注意顺序,删除不必要的单列索引...
- **查询优化**:避免全表扫描,使用WHERE子句过滤不必要的数据,合理使用JOIN操作,减少子查询,考虑使用临时表。 - **索引优化**:合理创建主键和唯一键,为经常出现在WHERE条件中的列创建索引,避免在索引字段...
3. 索引失效:避免在索引列上使用函数,避免全表扫描,合理设计索引。 五、存储引擎 1. InnoDB与MyISAM:对比这两种常用的存储引擎,了解它们在事务处理、并发控制、存储方式上的差异。 2. 其他引擎:如Memory用于...
这是因为MySQL的查询优化器在面对大量数据的分页请求时,可能选择全表扫描而不是利用索引来提高效率。这个问题在描述中的例子中得到了体现,当尝试获取数据集的远端分页时,查询速度显著降低。 1. **分页查询原理:...
2. **避免使用ORDER BY + LIMIT组合**:这种组合会导致全表扫描。 3. **使用索引辅助分页**:通过在排序字段上建立索引来提高分页效率。 4. **优化分页逻辑**:例如使用基于偏移量的分页或基于游标的分页。 #### 四...
2. 避免全表扫描:避免在OFFSET部分使用大数值,这可能导致全表扫描,降低性能。 3. 分页参数校验:确保用户输入的页码和每页大小在合理范围内,防止SQL注入。 4. 前后端分离:若采用前后端分离架构,前端需处理分页...
1. 分页效率:避免全表扫描,利用索引提高查询速度。 2. 安全性:使用`PreparedStatement`防止SQL注入攻击。 3. 异常处理:确保捕获并适当地处理可能出现的`SQLException`。 4. 连接管理:及时关闭数据库连接和结果...
- **避免全表扫描**:如果可能,使用`IN`子查询或`JOIN`代替`OFFSET`,以减少全表扫描。 - **预估页数**:在用户滚动到底部加载更多数据时,可以提前计算出下一页的ID范围,减少不必要的查询。 4. **MySQL分页工具*...
- **避免全表扫描**:通过合理使用索引,避免对大表进行全表扫描,减少I/O操作,提高查询速度。 - **使用EXPLAIN分析查询**:学习使用EXPLAIN命令来查看查询执行计划,分析查询效率,找出可能的瓶颈。 - **优化...
- 查询优化:避免全表扫描,合理使用LIMIT,减少子查询,优化JOIN操作。 - 表设计:范式理论,选择合适的数据类型,避免冗余数据,合理拆分大表。 5. 存储引擎: - InnoDB与MyISAM:比较两者在事务处理、行级...