`
omygege
  • 浏览: 1345427 次
文章分类
社区版块
存档分类
最新评论

使用Limit参数优化MySQL查询 潇湘博客

 
阅读更多

我们在做一些查询的时候总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的。那么在 MySQL 中有那些方式是可以避免全表扫面的呢?除了我们大家很熟悉的通过使用索引列或分区等方式来进行查询的优化之外还有那些呢?

前些天看了一个老外写的程序,在 MySQL 查询中使用了很多 Limit 关键字,这就让我很感兴趣了,因为在我印象中, Limit 关键字似乎更多被使用 MySQL 数据库的程序员用来做查询分页(当然这也是一种很好的查询优化),那在这里举个例子,假设我们需要一个分页的查询 ,Oracle中一般来说都是用以下 SQL 句子实现:

SELECT * FROM

( SELECT a1.*, rownum rownum_

FROM testtable a1

WHERE rownum > 20)

WHERE rownum_ <= 1000

这个语句就能查询到 testtable 表中的 20 1000 记录,而且还需要嵌套查询,效率不会太高,看看 MySQL 的实现:

SELECT * FROM testtable a1 limit 20,980;

这样就能返回 testtable 表中的 21 条到( 20 980 =) 1000 条的记录。

实现语法确实简单,但如果要说这里两个 SQL 语句的效率,那就很难做比较了,因为在 MySQL Limit 选项有多种不同的解释方式,不同方式下的速度差异是很大的,因此我们不能从这语句的简洁程度就说谁的效率高。

不过对程序员来说,够简单就好,因为维护成本低,呵呵。

下面讲讲这个 Limit 的语法吧:

SELECT ……. --Select 语句的其他参数

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

这里 offset 是偏移量(这个偏移量的起始地址是 0 ,而不是 1 ,这点很容易搞错的)顾名思义就是离开起始点的位置,而 row-count 也是很简单的,就是返回的记录的数量限制。

Eg. SELECT * FROM testtable a limit 10,20 where ….

这样就能使结果返回 10 行以后(包括 10 行自身)的符合 where 条件的 20 条记录。

那么如果没有约束条件就返回 10 29 行的记录。

那这跟避免全表扫描有什么关系呢? 下面是 MySQL 手册对 Limit 参数优化扫描的一些说明:

在一些情况中,当你使用 LIMIT 选项而不是使用 HAVING 时, MySQL 将以不同方式处理查询。

l 如果你用 LIMIT 只选择其中一部分行,当 MySQL 一般会做完整的表扫描时,但在某些情况下会使用索引(跟 ipart 有关)。

l 如果你将 LIMIT n ORDER BY 同时使用,在 MySQL 找到了第一个符合条件的记录后,将结束排序而不是排序整个表。

l LIMIT n DISTINCT 同时使用时, MySQL 在找到一个记录后将停止查询。

l 某些情况下, GROUP BY 能通过顺序读取键 ( 或在键上做排序 ) 来解决,并然后计算摘要直到键值改变。在这种情况下, LIMIT n 将不计算任何不必要的 GROUP

l MySQL 完成发送第 n 行到客户端,它将放弃余下的查询。

l LIMIT 0 选项总是快速返回一个空记录。这对检查查询并且得到结果列的列类型是有用的。

l 临时表的大小使用 LIMIT # 计算需要多少空间来解决查询。

转自:
http://www.blogjava.net/chenpengyi/archive/2006/07/29/60679.html
分享到:
评论

相关推荐

    使用Limit参数优化MySQL查询的方法

    我们在做一些查询的时候总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的。...除了我们大家很熟悉的通过使用索引列或分区等方式来进行查询的优化之外还有那些呢?

    mysql分页的limit参数简单示例

    Mysql的分页的两个参数 select * from user limit 1,2 ... 您可能感兴趣的文章:详解MySQL的limit用法和分页查询语句的性能分析MYSQL分页limit速度太慢的优化方法mysql limit分页优化方法分享Mysql limit

    MySQL数据库查询优化

    第3课 查询优化技术理论与MySQL实践(一)------子查询的优化(一) 第4课 查询优化技术理论与MySQL实践(二)------子查询的优化(二) 从理论看,子查询包括的内容和范围,建立清晰的概念 从实践看,MySQL的子查询...

    mysql分页之limit优化技巧

    本文档针对mysql分页之limit慢的问题,使用联合索引在大数据量的情况下优化limit分页的性能

    mysql limit分页优化详细介绍

    mysql limit分页优化 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的。 网上也很多关于limit的五条优化准则,都是翻译自MySQL...

    mysql limit查询优化分析

    LIMIT接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。为了与 PostgreSQL ...

    Mysql Limit 分页查询优化详解

    主要介绍了Mysql Limit 分页查询优化的相关资料,非常不错,介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下

    mysql limit两个参数.docx

    mysql limit两个参数

    mysql优化limit查询语句的5个方法

    mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,mysql明显性能下降 1.子查询优化法 先找出第一条数据,然后大于等于这条数据的id就是要获取的数据 缺点:...

    浅谈mysql使用limit分页优化方案的实现

    Mysql limit分页语句用法 与Oracle和MS SqlServer相比,mysql的分页方法简单的让人想哭。 –语法: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset –举例: select * from table limit 5; --...

    Mysql优化技巧之Limit查询的优化分析

    那么就会使用到limit查询,当我们在使用Limit查询的时候,在数据比较小、或者只查询前面一部分数据的时候效率是很高的。但是当数据量大的时候,或者查询offset数量比较大的时候,如:limit 100000,20效率往往就不尽...

    MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化

    数据库使用的MySQL,有一个日志表,需要进行分页查询,于是很容易就想到了limit [offset偏移量] [count数量]这个查询方式,当我们偏移量比较小时,似乎是没什么问题 SELECT * FROM t_log WHERE type = 1 LIMIT 5, 50 ...

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

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

    MySQL Limit性能优化及分页数据性能优化详解

    MySQL Limit可以分段查询数据库数据,主要应用在分页上。虽然现在写的网站数据都是千条级别,一些小的的优化起的作用不大,但是开发就要做到极致,追求完美性能。下面记录一些limit性能优化方法。 Limit语法: ...

    mysql 前几条记录语句之(limit)

    您可能感兴趣的文章:Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架mysql limit分页优化方法分享使用Limit参数优化MySQL查询的方法mysql limit查询优化分析Mysql中limit的用法方法详解...

    mysql limit分页优化方法分享

    网上也很多关于limit的五条优化准则,都是翻译自MySQL手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。 文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取...

    MYSQL优化详情大全

    MySQL优化是指通过调整数据库的配置和优化查询语句等方式来提高MySQL数据库的性能和效率。 以下是一些常见的MySQL优化方法和技巧的描述: 优化数据库结构:设计良好的数据库结构可以提高查询效率。包括正确选择...

Global site tag (gtag.js) - Google Analytics