- 浏览: 77064 次
- 性别:
- 来自: 杭州
文章分类
最新评论
估算大概值可以分析执行计划信息
sql:
EXPLAIN PLAN FOR
select *
from xx t where 1=1
and date1 >= to_date('2011-12-09 00:00:15','yyyy-MM-dd hh24:mi:ss')
and date2 <= to_date('2011-12-19 00:00:40','yyyy-MM-dd hh24:mi:ss');
select * from table(DBMS_XPLAN.DISPLAY);
***********************************************************************
java方法:
/**
*
* 快速估算大约总记录数
* @param 查询sql
* @return 大约总数记录数
*/
public int getComputeTotal(String sql) {
Statement st = null;
ResultSet reset = null;
int computeTotal=0;
try {
String sqlexplan = "EXPLAIN PLAN FOR "+sql;
Connection newconnect = getConnection(true);
st = newconnect.createStatement();
st.execute(sqlexplan);
st = newconnect.createStatement();
reset = st.executeQuery("select t.plan_table_output from table(DBMS_XPLAN.DISPLAY) t");
String rowString="";
int i=0;
while (reset.next()) {
if(i==5){
rowString=reset.getString("plan_table_output");
break;
}
i++;
}
if(rowString!=null&&!"".equals(rowString)){
rowString=rowString.replaceAll(" ", "");
String rows[]=rowString.split("\\|");
if(rows[4].endsWith("K")){
rows[4]=rows[4].substring(0, rows[4].length()-1);
computeTotal=Integer.valueOf(rows[4])*1000;
}else if(rows[4].endsWith("M")){
rows[4]=rows[4].substring(0, rows[4].length()-1);
computeTotal=Integer.valueOf(rows[4])*1000*1000;
}else if(rows[4].endsWith("T")){
rows[4]=rows[4].substring(0, rows[4].length()-1);
computeTotal=Integer.valueOf(rows[4])*1000*1000*1000;
}else{
computeTotal=Integer.valueOf(rows[4]);
}
}
reset.close();
} catch (Exception e) {
logger.error(e);
} finally {
this.close(this.connect, st, reset);
}
return computeTotal;
}
*******************************************************
分页处需要修改:
int computeTotal=getComputeTotal(sqlall);
if(computeTotal<100000){
String countsql = "select count(*) from xx t where 1=1 "+sqllike+"";
int count = 0;
st = getConnection().createStatement();
reset = st.executeQuery(countsql);
while(reset.next()){
count = reset.getInt(1);
}
pager.setTotal(count);
pager.setPageTotal(count/pager.getPageSize());
}else{
pager.setTotal(computeTotal);
pager.setPageTotal(computeTotal/pager.getPageSize());
}
已经在3亿数据量数据库做过测试
附快速统计某个表总记录数sql:
select table_name,num_rows from dba_tables where table_name ='XX'
sql:
EXPLAIN PLAN FOR
select *
from xx t where 1=1
and date1 >= to_date('2011-12-09 00:00:15','yyyy-MM-dd hh24:mi:ss')
and date2 <= to_date('2011-12-19 00:00:40','yyyy-MM-dd hh24:mi:ss');
select * from table(DBMS_XPLAN.DISPLAY);
***********************************************************************
java方法:
/**
*
* 快速估算大约总记录数
* @param 查询sql
* @return 大约总数记录数
*/
public int getComputeTotal(String sql) {
Statement st = null;
ResultSet reset = null;
int computeTotal=0;
try {
String sqlexplan = "EXPLAIN PLAN FOR "+sql;
Connection newconnect = getConnection(true);
st = newconnect.createStatement();
st.execute(sqlexplan);
st = newconnect.createStatement();
reset = st.executeQuery("select t.plan_table_output from table(DBMS_XPLAN.DISPLAY) t");
String rowString="";
int i=0;
while (reset.next()) {
if(i==5){
rowString=reset.getString("plan_table_output");
break;
}
i++;
}
if(rowString!=null&&!"".equals(rowString)){
rowString=rowString.replaceAll(" ", "");
String rows[]=rowString.split("\\|");
if(rows[4].endsWith("K")){
rows[4]=rows[4].substring(0, rows[4].length()-1);
computeTotal=Integer.valueOf(rows[4])*1000;
}else if(rows[4].endsWith("M")){
rows[4]=rows[4].substring(0, rows[4].length()-1);
computeTotal=Integer.valueOf(rows[4])*1000*1000;
}else if(rows[4].endsWith("T")){
rows[4]=rows[4].substring(0, rows[4].length()-1);
computeTotal=Integer.valueOf(rows[4])*1000*1000*1000;
}else{
computeTotal=Integer.valueOf(rows[4]);
}
}
reset.close();
} catch (Exception e) {
logger.error(e);
} finally {
this.close(this.connect, st, reset);
}
return computeTotal;
}
*******************************************************
分页处需要修改:
int computeTotal=getComputeTotal(sqlall);
if(computeTotal<100000){
String countsql = "select count(*) from xx t where 1=1 "+sqllike+"";
int count = 0;
st = getConnection().createStatement();
reset = st.executeQuery(countsql);
while(reset.next()){
count = reset.getInt(1);
}
pager.setTotal(count);
pager.setPageTotal(count/pager.getPageSize());
}else{
pager.setTotal(computeTotal);
pager.setPageTotal(computeTotal/pager.getPageSize());
}
已经在3亿数据量数据库做过测试
附快速统计某个表总记录数sql:
select table_name,num_rows from dba_tables where table_name ='XX'
发表评论
-
创建DBlinksql
2013-08-16 10:48 702create database link jjlink con ... -
导入备份dmp文件
2013-04-09 13:40 805impdp xx/xxDIRECTORY=SRS_111 D ... -
job相关
2013-04-01 18:17 638创建job DECLARE JOBID NUMBER; B ... -
oracle中导出excel
2013-03-29 17:09 840create or replace directory MY_ ... -
数据库设计中的命名规范(转)
2013-03-22 22:58 711数据库设计中的命名规 ... -
ora-00600
2013-01-26 15:37 824select t.FILE# from V$datafile ... -
某一段时间,在小于五秒钟内出现2次以上
2013-01-15 18:42 601查询 某一段时间,a在小于五秒钟内出现2次以上 with ... -
SQL优化策略
2013-01-08 18:35 6861、 尽量少用IN操作符, ... -
分区索引导致数据库分页错乱
2012-12-18 15:21 793select t2.* from (select t1.*, ... -
oracle索引建立
2012-12-18 15:10 737alter system修改的是参数文件,所有用户都会生效 a ... -
数据库常用不使用索引情况
2012-12-03 15:24 8841.使用<>,!=,^= 不使用索引可以使用 in ... -
oracle查看某个表索引状态sql
2012-11-30 14:31 1280select index_name,status from d ... -
ORA-00257错误解决
2012-11-23 18:53 1023通过sqlplus命令连接数据库 show parameter ... -
mysql和oracle批处理运行sql文件和oracle导入dmp文件
2012-11-07 18:26 1270mysql批处理运行sql: net stop mysql n ... -
oracle实现group_connect
2012-11-07 18:16 8441.10g及以后版本使用wm_concat 2. wm_c ... -
高效循环插入大数据量测试
2012-11-07 18:15 689declare idx number(22): ... -
JDBC读取新插入Oracle数据库Sequence值的5种方法
2012-08-27 23:33 0Oracle的sequence实现非常灵活,所以也带来一些易用 ... -
DBCP object created by following code was nerver closeed
2012-08-27 23:31 0DBCP object created by followi ... -
修改SGA无法启动
2012-08-27 23:30 701解决步骤 假如没有备份init.ora 1.dos 输入 ... -
Oracle数据库查询高效分页
2012-08-27 23:27 7511.select * 2. from (select * ...
相关推荐
海量数据处理方法 海量数据处理是指基于海量数据上的存储、处理、操作,解决方案包括巧妙的算法搭配适合的数据结构,如 Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie 树,以及大而化小、分而治之的策略。...
使用该函数,我们可以构建一个动态的SQL语句,将外部数据源的数据直接插入、更新或查询到SQL Server数据库中,避免了传统方式中需要先将数据加载到临时表或者使用BULK INSERT等方法的复杂过程。 要使用...
在处理MySQL海量数据查询优化时,我们需要关注的策略包括但不限于以下几点: 1. 优化索引使用:避免全表扫描至关重要。为此,应当在查询条件(WHERE)和排序(ORDER BY)涉及的列上创建索引。索引有助于数据库管理...
随着大数据技术的不断发展,各种高效解决方案应运而生,旨在帮助我们快速、准确地处理和查询大规模数据。这篇文档将深入探讨如何应对海量数据查询的问题,分享一些实用的技术和工具。 首先,我们得了解大数据的基本...
### 基于内存映射文件技术的海量影像数据快速读取方法 #### 摘要与背景 随着信息技术和传感器技术的迅速发展,遥感图像的数据量呈现几何级数的增长趋势。传统的文件读取方法(如通过文件指针读取文件)仅能正确...
Bloom Filter的引入是为了高效利用数据空间,在海量数据匹配查询方面具有重要作用。 3. 分布式技术与Bloom Filter结合:在海量数据快速匹配的背景下,分布式技术可以有效提升处理速度和数据的并发处理能力。文章...
本篇文章将深入探讨“海量数据查询优化”这一主题,包括聚集与非聚集索引的区别,以及如何利用索引来提升查询性能。 首先,我们要理解什么是索引。索引是数据库管理系统中用于加速数据检索的数据结构。它类似于书籍...
【标题】:“百万数据查询优化海量...以上策略是优化海量数据查询的基础方法,实际应用中,还需要根据具体数据库管理系统和业务需求进行调整。持续监控和分析查询性能,结合数据库调优工具,能进一步提升系统整体性能。
海量数据处理方法总结 本文总结了常用的海量数据处理方法,包括 Bloom filter、Hashing 和 bit-map 等。这些方法可以用来解决大数据量的问题,例如数据字典、判重、集合求交集等问题。 Bloom Filter Bloom filter...
1. 海量结构数据的查询优化问题:随着计算机和移动互联网技术的快速发展,大量数据的生成速度加快,如何高效地管理和查询这些海量数据成为了亟待解决的问题。特别是结构化数据,其处理效率直接影响到数据应用的价值...
海量数据处理分析方法是现代信息技术领域中的关键技能,尤其对于涉及检索和数据分析的工作岗位而言,掌握这些方法显得尤为重要。随着互联网和物联网的发展,数据量呈现爆炸式增长,传统的数据处理手段已经无法应对...
在SQL Server中处理海量数据查询是一项挑战,但也是数据库管理员和开发人员必须掌握的重要技能。以下将详细讨论如何有效地进行海量数据的分页、查询和排序。 首先,我们来看**海量数据分页**。在SQL Server中,常见...
本文当是一个基于HBase的海量数据的实实时查询系统的原理分析。详细的介绍了大数据查询的原理。
总结起来,解决海量数据查找问题的关键在于:合理的数据结构选择,如快速选择、二叉堆和索引;高效的算法应用,如B树、B+树、哈希表和分布式计算;以及针对具体场景的优化策略。这些方法和技巧在实际工程中有着广泛...
海量数据是发展趋势,对数据分析和挖掘也越来越重要,从海量数据中提取有用信息重要而紧迫,这便要求处理要准确,精度要高,而且处理时间要短,得到有价值信息要快,所以,对海量数据的研究很有前途,也很值得进行...
基于内存映射文件的海量点云数据快速读取方法.pdf 本文提出了一种基于内存映射文件的海量点云数据快速读取方法,以解决海量点云数据读取效率低下的问题。该方法通过对虚拟内存系统模式和内存映射文件的工作机理进行...
海量数据查询优化及分页方法,本文中对查询数据的主要方法进行了分析,并给出了具体分析
### SQL Server 海量数据处理:查询、插入与删除 在现代数据分析与企业级应用中,高效处理海量数据是IT专业人员必须掌握的关键技能之一。本文将深入探讨SQL Server环境下如何进行大规模数据的操作,包括查询、插入...
### 大数据量,海量数据处理方法总结 在IT领域,特别是大数据分析、数据库管理和算法设计方面,处理海量数据的能力是至关重要的技能之一。本文旨在总结处理大数据量、海量数据的有效方法,涵盖从理论基础到实际应用...