使用Limit参数优化MySQL查询的方法
前些天看了一个老外写的程序,在MySQL查询中使用了很多Limit关键字,这就让我很感兴趣了,因为在我印象中,Limit关键字似乎更多被使用MySQL数据库的程序员用来做查询分页(当然这也是一种很好的查询优化),那在这里举个例子,假设我们需要一个分页的查询,Oracle中一般来说都是用以下SQL句子实现:
SELECT*FROM
(SELECTa1.*,rownumrownum_
FROMtesttablea1
WHERErownum>20)
WHERErownum_<=1000
这个语句就能查询到testtable表中的20到1000记录,而且还需要嵌套查询,效率不会太高,看看MySQL的实现:
SELECT*FROMtesttablea1limit20,980;
这样就能返回testtable表中的21条到(20+980=)1000条的记录。
实现语法确实简单,但如果要说这里两个SQL语句的效率,那就很难做比较了,因为在MySQL中Limit选项有多种不同的解释方式,不同方式下的速度差异是很大的,因此我们不能从这语句的简洁程度就说谁的效率高。
不过对程序员来说,够简单就好,因为维护成本低,呵呵。
下面讲讲这个Limit的语法吧:
SELECT…….--Select语句的其他参数
[LIMIT{[offset,]row_count|row_countOFFSEToffset}]
这里offset是偏移量(这个偏移量的起始地址是0,而不是1,这点很容易搞错的)顾名思义就是离开起始点的位置,而row-count也是很简单的,就是返回的记录的数量限制。
Eg.SELECT*FROMtesttablealimit10,20where….
这样就能使结果返回10行以后(包括10行自身)的符合where条件的20条记录。
那么如果没有约束条件就返回10到29行的记录。
那这跟避免全表扫描有什么关系呢?下面是MySQL手册对Limit参数优化扫描的一些说明:
在一些情况中,当你使用LIMIT选项而不是使用HAVING时,MySQL将以不同方式处理查询。
l如果你用LIMIT只选择其中一部分行,当MySQL一般会做完整的表扫描时,但在某些情况下会使用索引(跟ipart有关)。
l如果你将LIMITn与ORDERBY同时使用,在MySQL找到了第一个符合条件的记录后,将结束排序而不是排序整个表。
l当LIMITn和DISTINCT同时使用时,MySQL在找到一个记录后将停止查询。
l某些情况下,GROUPBY能通过顺序读取键(或在键上做排序)来解决,并然后计算摘要直到键值改变。在这种情况下,LIMITn将不计算任何不必要的GROUP。
l当MySQL完成发送第n行到客户端,它将放弃余下的查询。
l而LIMIT0选项总是快速返回一个空记录。这对检查查询并且得到结果列的列类型是有用的。
l临时表的大小使用LIMIT#计算需要多少空间来解决查询。
相关文章
- MySQL:设置活动会话过期时间(mysql过期时间)
- 参与主从MySQL双服务器实现主从设置(mysql两台服务器)
- MySQL中实现字符串截取的方法(mysql的截取字符串)
- MySQL中使用替换函数实现字符串替换(mysql替换函数)
- MySQL记录被锁:事件爆发及解决之道(mysql记录被锁)
- MySQL在线添加索引:简单便捷的优化方式(mysql在线添加索引)
- MySQL如何恢复丢失的数据(mysql如何恢复数据)
- 语句MySQL:不只是查询语句(mysql不等于查询)
- MySQL二进制日志:灵活的备份和恢复策略(mysql二进制日志)
- 简单高效,提升测试效率——MySQL数据库测试工具(mysql数据库测试工具)
- 使用 PHP 查询 MySQL 数据库的方法详解(php查询mysql数据)
- 退出MySQL的步骤:解决方案(如何退出mysql)
- 25个关键字:Mysql工具类分享:让开发更便捷的数据库连接工具。(mysql工具类)
- 查询当前月份的MySQL数据方法(mysql当月数据)
- MySQL如何为字段添加备注详解(mysql给字段加备注)
- MySQL中如何使用SUM计算并赋值(mysql中sum并赋值)
- MySQL中使用PK和AI约束实现数据自动递增(mysql中pk ai)
- MySQL中1005错误的解决方法(mysql中1005)
- 使用CI框架中MySQL DSN快速搭建数据库应用(ci mysql dsn)
- 使用Arm平台编译MySQL数据库(arm mysql 编译)
- 使用MySQL替换XML数据一种高效的方法(mysql xml替换)
- MySQL版本间数据迁移实现数据平稳转移的方法(mysql不同版本导数据)
- GET MYSQL 免费下载并破解MySQL数据库软件(mysql下载和破解)
- 遗忘MySQL密码学会快速找回密码的有效方法(mysql 不知道密码)
- mysql数据库远程访问设置方法