oracle
select * from table where rownum<20
minus
select * from table where rownum<10
//但这种查询的效率更高于前者 (556436条数据,测试结果)
select * from (select rownum r,a.* from blog a where rownum<=20) where r>=10;
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行
//换句话说,LIMIT n 等价于 LIMIT 0,n
mysql limit查询优化[转载],由于limit经常用到,却没有注意,因为平时做的项目都比较小,所以也没有考虑去怎么优化,今天看了一篇关于mysql limit优化的文章,感觉很好 于是转载过来
原文地址在这里
http://www.phpobject.net/blog/read.php?119
MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。
同样是取10条数据
select * from yanxue8_visit limit 10000,10 和
select * from yanxue8_visit limit 0,10
就不是一个数量级别的。
网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。原文地址:http://www.zhenhua.org/article.asp?id=200
文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核 (3GHZ) +4G内存 mysql 5.0.19)
1、offset比较小的时候。
select * from yanxue8_visit limit 10,10
多次运行,时间保持在0.0004-0.0005之间
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10,1
) limit 10
多次运行,时间保持在0.0005-0.0006之间,主要是0.0006
结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。
2、offset大的时候。
select * from yanxue8_visit limit 10000,10
多次运行,时间保持在0.0187左右
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10
多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。
以后要注意改正自己的limit语句,优化一下mysql了
分享到:
相关推荐
### Oracle常用SQL语句知识点详解 #### 一、概述 Oracle是全球领先的数据库管理系统之一,在企业级应用领域占据着重要地位。SQL(Structured Query Language)是用于管理关系型数据库的标准语言,也是与Oracle...
如果我们想要查询第11-20条记录,我们可以使用以下SQL语句: ```sql SELECT t_col1,t_col2 FROM t_table_name WHERE rownum > 10 and rownum <= 20; ``` 二、使用Minus运算符实现分页查询 除了使用RowNum函数,...
例如,如果你想从第11条开始取10条记录,`LIMIT 10, 10`就能实现。 然而,不同的数据库系统可能有不同的语法。例如,在PostgreSQL中,可以使用`FETCH FIRST N ROWS ONLY`或`OFFSET M ROWS FETCH NEXT N ROWS ONLY`...
在这个例子中,`LIMIT 10, 20`表示从第11条记录开始取20条记录,也就是第10页的数据。 2. **注意事项:** - `LIMIT`关键字非常直观易用,但在大数据量的情况下,如果`OFFSET`值过大,性能会受到影响。 - 可以...
第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统包 第23章 使用大对象 第24章 读写os文件 第25章 开发多媒体应用 第26章 开发web应用 第27章 dbms_sq动态sql 第28章 ...
读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...
读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,而且可以掌握SQL语句和PL/SQL的各种基础知识和高级特征(记录类型、集合类型...
### 使用简单的SQL语句实现的Oracle数据库分页技术 #### 环境:Oracle 9i 在Oracle数据库中实现分页查询是一项常见的需求,尤其是在处理大量数据时。本文将介绍一种利用简单SQL语句来实现Oracle数据库分页的方法,...
这些语句向`student_1`表中添加了四条记录,其中部分字段为空值或未给出具体值。 ### 查询特定条件的数据 接下来是一些查询语句示例,这些语句用于根据特定条件检索数据: ```sql SELECT studName FROM student_1...
例如,从表 Sys_option 中从第 10 条记录开始检索 20 条记录,语句如下: ```sql SELECT * FROM ( SELECT TOP 20 * FROM ( SELECT TOP 29 * FROM Sys_option ORDER BY sys_id DESC ) t1 ) t2 ORDER BY ...
- 向表 `a` 中插入一条记录,值为 `1`。 - **命令**: `insert into a values(1);` **10. 查询记录** - 查询表 `a` 中的所有记录。 - **命令**: `select * from a;` **11. 更改记录** - 更新表 `a` 中的记录,...
17. **排序**:第十七题和第十八题涉及到`ORDER BY`语句,用于按指定字段排序数据。 18. **多级排序**:第十九题展示了如何进行多级排序,先按工作降序,再按薪金升序。 19. **日期格式化**:第二十题中,`TO_CHAR...
第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统包 第23章 使用大对象 第24章 读写os文件 第25章 开发多媒体应用 第26章 开发web应用 第27章 dbms_sq动态sql 第28章 ...
例如,在Oracle数据库中,我们可以使用`V$SQL`视图来获取SQL语句的相关统计信息。查询可能包含以下关键部分: ```sql SELECT sql_text, total_executions, cpu_time, (cpu_time/total_executions) as avg_cpu_time ...
以下是一个示例,假设我们要从名为 `components` 的表中获取每页显示 10 条记录,当前页为第 2 页(即显示第 11-20 条记录): ```sql SELECT TOP 10 * FROM components WHERE id NOT IN (SELECT TOP 10 * 10 id ...
例如,假设当前页码为2,每页显示10条记录,则对应的SQL查询条件应该是`ROWNUM BETWEEN 11 AND 20`。 3. **优化性能**:为了提高分页查询的效率,可以考虑以下几个方面: - 为经常用于排序和过滤的列建立索引。 -...
7. CASE表达式是SQL中的条件表达式,类似于编程语言中的switch-case结构,用于在SELECT语句中进行条件判断,并返回不同的结果。 8. ROWNUM-TOP-N分析,使用ROWNUM伪列进行结果集的分页显示,以及处理具有行级计算的...
例如,从表`Sys_option`(主键为`sys_id`)中从第10条记录开始检索20条记录,可以使用以下SQL语句: ```sql SELECT * FROM ( SELECT TOP 20 * FROM ( SELECT TOP 29 * FROM Sys_option ORDER BY sys_id DESC )...
这条SQL语句从`USER`表中选取第10到第19行的数据。需要注意的是,这里的`< 20`意味着不会包括第20行。 #### 二、SQL Server数据库分页实现 在SQL Server中,并没有直接提供类似Oracle中`ROWNUM`这样的功能来实现...