﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-远东侯</title><link>http://www.blogjava.net/snow/</link><description>吃不下，硬撑下去！

</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 05:50:41 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 05:50:41 GMT</pubDate><ttl>60</ttl><item><title>Oracle百万数据的分页查询和测试案例 </title><link>http://www.blogjava.net/snow/archive/2009/10/10/297627.html</link><dc:creator>远东侯</dc:creator><author>远东侯</author><pubDate>Sat, 10 Oct 2009 01:07:00 GMT</pubDate><guid>http://www.blogjava.net/snow/archive/2009/10/10/297627.html</guid><wfw:comment>http://www.blogjava.net/snow/comments/297627.html</wfw:comment><comments>http://www.blogjava.net/snow/archive/2009/10/10/297627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/snow/comments/commentRss/297627.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/snow/services/trackbacks/297627.html</trackback:ping><description><![CDATA[<div class="postText">
<p><strong>一、<a href="http://www.fastunit.com/" target="_blank">FastUnit</a>平台的分页机制</strong> <br />
使用2次查询来实现分页：<br />
1. 获取总记录数<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; height: 28px; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /> <span style="color: #0000ff">select</span> <span style="color: #000000">&nbsp;</span> <span style="color: #ff00ff">count</span> <span style="color: #000000">(</span> <span style="color: #808080">*</span> <span style="color: #000000">)&nbsp;</span> <span style="color: #0000ff">from</span> <span style="color: #000000">&nbsp;T&nbsp;</span> <span style="color: #0000ff">where</span> <span style="color: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span> </div>
<p>2. 利用Oracle的rownum获取指定页的数据</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; height: 48px; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /> <span style="color: #0000ff">select</span> <span style="color: #000000">&nbsp;</span> <span style="color: #808080">*</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">from</span> <span style="color: #000000">&nbsp;(&nbsp;</span> <span style="color: #0000ff">select</span> <span style="color: #000000">&nbsp;row_.</span> <span style="color: #808080">*</span> <span style="color: #000000">,&nbsp;rownum&nbsp;rownum_&nbsp;</span> <span style="color: #0000ff">from</span> <span style="color: #000000">&nbsp;(&nbsp;</span> <span style="color: #0000ff">SELECT</span> <span style="color: #000000">&nbsp;</span> <span style="color: #808080">*</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">FROM</span> <span style="color: #000000">&nbsp;T&nbsp;</span> <span style="color: #0000ff">where</span> <span style="color: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />) row_&nbsp;</span> <span style="color: #0000ff">where</span> <span style="color: #000000">&nbsp;rownum&nbsp;</span> <span style="color: #808080">&lt;=</span> <span style="color: #000000">?)&nbsp;</span> <span style="color: #0000ff">where</span> <span style="color: #000000">&nbsp;rownum_&nbsp;</span> <span style="color: #808080">&gt;</span> <span style="color: #000000">&nbsp;?</span> </div>
<p>（根据上一步得到的总记录数以及每页行数、当前页码计算出起始行号和结束行号，设置在上述SQL语句的&#8220;？&#8221;处）<br />
<br />
<strong>二、测试环境</strong><br />
操作系统：Windows XP Professional SP1<br />
CPU：迅驰1.6G<br />
物理内存：1G<br />
应用服务器：Tomcat 5.5.23<br />
数据库：Oracle92（默认设置）</p>
<p><strong>三、测试对象</strong> <br />
FastUnit平台的日志表，脚本如下：<strong></strong></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /> <span style="color: #0000ff">CREATE</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">TABLE</span> <span style="color: #000000">&nbsp;ACCESSLOG(<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">NUMBER</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">10</span> <span style="color: #000000">,</span> <span style="font-weight: bold; color: #800000">0</span> <span style="color: #000000">)&nbsp;</span> <span style="color: #808080">NOT</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">NULL</span> <span style="color: #000000">,<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">NUMBER</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">1</span> <span style="color: #000000">,</span> <span style="font-weight: bold; color: #800000">0</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;userid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;username&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;domain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;groupid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;groupname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;unitid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;unitname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;elementid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;elementname&nbsp;&nbsp;&nbsp;</span> <span style="font-weight: bold; color: #000000">VARCHAR2</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">50</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">NUMBER</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">5</span> <span style="color: #000000">,</span> <span style="font-weight: bold; color: #800000">0</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ok&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #000000">NUMBER</span> <span style="color: #000000">(</span> <span style="font-weight: bold; color: #800000">1</span> <span style="color: #000000">,</span> <span style="font-weight: bold; color: #800000">0</span> <span style="color: #000000">),<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;curtime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATE,<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">PRIMARY</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">KEY</span> <span style="color: #000000">&nbsp;(id)<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span> <span style="color: #0000ff">CREATE</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">INDEX</span> <span style="color: #000000">&nbsp;AL_ct_idx&nbsp;</span> <span style="color: #0000ff">on</span> <span style="color: #000000">&nbsp;ACCESSLOG&nbsp;(curtime);</span> </div>
<p><br />
<strong>四、测试结果</strong> <br />
本案例中，数据库除了索引未使用其他优化措施。<br />
仅设置curtime条件时（使用索引），平均响应时间为620毫秒（如下图所示）；<br />
对比：<br />
不设置任何条件时，平均响应时间为2300毫秒；<br />
仅设置userid条件时（未使用索引），平均响应时间为5100毫秒。<br />
<img height="507" alt="page.png" src="http://www.blogjava.net/images/blogjava_net/fastunit/page.png" width="797" vspace="5" border="1" /><br />
（图中的测试数据由FastUnit的跟踪器统计的，用来跟踪进程内各断点之间时间消耗、数据库连接数、查询次数、增删改次数、内存消耗等，可以直观的判断出系统瓶颈的位置，为系统优化提供支持。）<br />
<br />
<strong>五、对于大表的一般性优化措施</strong><br />
1. 表结构设计原则：数据类型尽量小（占用空间少，磁盘读入较快）、单独设置表空间<br />
2. 应用程序：合理设计业务、SQL语句优化<br />
3. 合理使用索引：只创建需要的索引，根据需要使用多列索引，存放于单独的表空间<br />
4. 数据库设置：内存分配、查询优化器、分区、分表等<br />
5. 硬件环境：硬盘、CPU、内存、网络带宽</p>
</div>
<img src ="http://www.blogjava.net/snow/aggbug/297627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/snow/" target="_blank">远东侯</a> 2009-10-10 09:07 <a href="http://www.blogjava.net/snow/archive/2009/10/10/297627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>