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

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

我们在做一些查询的时候,总是希望避免数据库引擎进行全表扫描,因为全表扫描需要很长的时间,而且大部分对客户端来说是没有意义的。那么在MySQL中有哪些避免全表扫描的方法呢?除了我们都很熟悉的使用索引列或分区的查询优化,还有哪些呢?

前几天看到一个老外写的程序,在MySQL查询中使用了大量的Limit关键字,让我很感兴趣,因为在我的印象中,Limit关键字似乎更多的是使用MySQL数据库做查询分页的程序员使用的(当然这也是一个很好的查询优化)。所以这里举个例子,假设我们需要一个分页查询,Oracle一般用以下SQL语句实现:SELECT * FROM (SELECT a1。*,Rownum Rownum _ from testtable a1 where Rownum 20)where Rownum _=1000这个语句可以查询test table表中的20到1000条记录,而且还需要嵌套查询,效率不会太高。再看MySQL的实现:select * from testtable a1 limit 20,980;这将在testtable表中返回21到(20+980=) 1000条记录。实现语法真的很简单,但是这里要说两个SQL语句的效率,就很难比较了,因为MySQL中的Limit选项有很多不同的解释,不同方式的速度差别很大,所以不能从这个语句的简洁程度来说谁的效率高。但是对于程序员来说,足够简单就好了,因为维护成本低,呵呵。先说这个极限的语法:SELECT ……- Select语句的Select参数[limit {[offset,] row _ count | row _ count offset}]这里offset是偏移量(这个偏移量的起始地址是0,不是1,容易弄错)。顾名思义就是远离起点的位置,row-count也很简单,就是返回的记录。例如,从测试表a中选择*限值10,20,其中.这将使结果在10行之后返回20条满足where条件的记录(包括10行本身)。如果没有约束,将返回10到29行记录。这与避免全表扫描有什么关系?下面是MySQL手册关于LIMIT参数优化扫描的一些说明:在某些情况下,当你使用Limit选项而不是HAVING时,MySQL会以不同的方式处理查询。l如果使用LIMIT只选择部分行,MySQL一般会进行完整的表扫描,但在某些情况下会使用索引(与ipart相关)。l如果同时使用LIMIT n和ORDER BY,MySQL找到第一条符合条件的记录后,会结束排序,而不是对整个表进行排序。当l LIMIT n和DISTINCT同时使用时,MySQL会在找到一条记录后停止查询。在某些情况下,GROUP BY可以通过顺序读取键(或对它们进行排序)来解决,然后计算摘要,直到键值发生变化。在这种情况下,LIMIT n将不计算任何不必要的组。当l MySQL向客户机发送完第n行时,它将丢弃剩余的查询。llimit0选项总是快速返回一个空记录。这对于检查查询和获取结果列的列类型非常有用。l临时表的大小使用LIMIT #来计算解决查询需要多少空间。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • pymysql菜鸟教程,pymysql 使用
  • pymysql菜鸟教程,pymysql 使用,pymysql模块使用简介与示例
  • mysql锁实现,mysql锁算法
  • mysql锁实现,mysql锁算法,MySQL锁机制与用法分析
  • mysql连接报错10061,mysql连接错误10060
  • mysql连接报错10061,mysql连接错误10060,MYSQL无法连接 提示10055错误的解决方法
  • mysql连接报10060错误,mysql连接报错10055
  • mysql连接报10060错误,mysql连接报错10055,MySQL连接异常报10061错误问题解决
  • mysql辅助索引和主键索引,mysql 主键 外键 索引
  • mysql辅助索引和主键索引,mysql 主键 外键 索引,MySQL索引之主键索引
  • MySQL语句大全,mysql常见语句总结
  • MySQL语句大全,mysql常见语句总结,MySQL语句整理及汇总介绍
  • mysql触发器的使用方法实验报告,mysql中触发器的使用
  • 留言与评论(共有 条评论)
       
    验证码: