Access大数据高效分页语句
Access大数据高效分页语句
oracle的分页查询可以利用rowid伪列。
db2的分页查询可以利用row_number() over()聚合函数。
mysql有limit。
access仿佛先天缺陷,仅提供了top n。那如何利用top来实现分页查询呢?
假设在access中有表t1
createtable t1(
tc1 varchar(50)notnullprimarykey,
tc2 varchar(30),
tc3 varchar(30)
)
随机插入20条数据。如果以每页5条来显示数据,如果要显示11至15条如何显示?
利用top n功能,前11条可以用以下sql完成。select top 11 tc1,tc2,tc3 from t1
同样前15条也可以这样:select top 15 tc1,tc2,tc3 from t1
想要得到11条到15条,估计一般都会想到差集,但access没提供差集except,可以利用notin实现。
select top 15 tc1,tc2,tc3 from t1 where tc1 notin(select top 10 tc1 from t1)
如果是一个比较大的表,用notin不能利用索引,使和效率极其低下,又该如何呢?
可以利用左连接来解决问题
select a.*from(select top15 tc1,tc2,tc3 from t1) a leftjoin(select top 10 tc1,tc2,tc3 from t1 ) b on a.tc1=b.tc1 where iif(b.tc1,'0','1')='1'
这种sql的好处是显而易见的,他有效的利用了表的主键索引。当然,由于access不能这样判断b.tc1 isnull,所以要改用iif(b.tc1,'0','1')='1'来曲线救国
C#DBHelper实现方式如下
/// <summary>
/// 分页查询数据并返回DataTable的公共方法
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="field">需要查询的字段</param>
/// <param name="pageSize">每页显示数据的条数</param>
/// <param name="start">排除的数据量</param>
/// <param name="sqlWhere">where条件</param>
/// <param name="sortName">排序名称</param>
/// <param name="sortOrder">排序方式</param>
/// <returns></returns>
publicstatic DataTable GetTable(String tableName, String field,int pageSize,int start, String sqlWhere, String sortName, String sortOrder,String primaryKey,out Int32 total)
{
//String sql = String.Format("select top {0} {1} from {2} where {7} and {6} not in (select top {3} {6} from {2} where {7} order by {4} {5}) order by {4} {5} ",
// pageSize, field, tableName, start, sortName, sortOrder, primaryKey, sqlWhere);
/*上面的分页效率极低,5000条数据几乎就不动了*/
String sql = String.Format("select a.* from ( select top {1} * from {2} where {7} order by {3} {4}) a left join ( select top {5} * from {2} where {7} order by {3} {4}) b on a.{6}=b.{6} where iif(b.{6},'0','1')='1'",
field, start + pageSize, tableName, sortName, sortOrder, start, primaryKey, sqlWhere);
if(start <=0)
{
sql = String.Format("select top {0} {1} from {2} where {3} order by {4} {5} ",
pageSize, field, tableName, sqlWhere, sortName, sortOrder);
}
DataTable dt = GetTable(sql, CommandType.Text,null);
sql ="select count(1) from "+tableName+" where "+ sqlWhere;
total = Convert.ToInt32(AccessHelper.ExecuteScalar(sql, CommandType.Text,null));
return dt;
}
Access大数据高效分页语句的更多相关文章
- MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...
- 【MYSQL】mysql大数据量分页性能优化
转载地址: http://www.cnblogs.com/lpfuture/p/5772055.html https://www.cnblogs.com/shiwenhu/p/5757250.html ...
- SQL大数据查询分页存储过程
最后一页分页一卡死,整个网站的性能都会非常明显的下降,不知道为啥,微软有这个BUG一直没处理好.希望SQL2012里不要有这个问题就好了. 参考代码如下: -- =================== ...
- MySQL大数据量分页查询
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...
- 【1】MySQL大数据量分页查询方法及其优化
---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ...
- MySQL大数据量分页性能优化
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...
- SQL优化-大数据量分页优化
百万数据量SQL,在进行分页查询时会出现性能问题,例如我们使用PageHelper时,由于分页查询时,PageHelper会拦截查询的语句会进行两个步骤 1.添加 select count(*)fro ...
- [转]Sql server 大数据量分页存储过程效率测试附代码
本文转自:http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下 ...
- 【mysql优化】大数据量分页优化
limit 翻页原理 limit offset,N, 当offset非常大时, 效率极低, 原因是mysql并不是跳过offset行,然后单取N行, 而是取offset+N行,返回放弃前offset行 ...
随机推荐
- 使用UI管理docker
比较全面的对比 wangzi19870227 比较推荐的有两种(http://dockone.io/article/225): Shipyard 和 dockerui https://docs.doc ...
- k8s渐进
基本命令介绍(推荐) 1. The Almighty Pause Container 2. What are Kubernetes Pods Anyway? 3.中文版官方翻译[版本2] 提供了很多 ...
- kali linux 2.0配置更新源后apt-get update 报错
这个是我/etc/apt/sources.list的更新源: deb http://http.kali.org/kali kali-rolling main contrib non-free deb ...
- caffe中的若干问题
找不到cublas....: 在/etc/ld.so.conf文件夹中新建cuda.conf,里面添加/usr/local/cuda/lib64,然后sudo /sbin/ldconfig -v. c ...
- 向eclipse的JavaWeb项目中导入jar包
一: 在你所需的jar包网站下载对应的jar包.如org.apache.commons.lang.jar. 二:复制粘贴到该JavaWeb的WEB-INF目录下的lib目录下,如: 三:右键 ...
- 使用svn导入项目
打开eclipse工作平台点击“File”-->import如下图: 在项目导入框中找到SVN选择“从SVN检出项目”然后点击“下一步”,出现如下界面: 在上图界面中选择“创建新的资源库 ...
- topcoder srm 435 div1
problem1 link 遍历未被删除的叶子结点即可. problem2 link 首先,将所有的蛋白质原子编号,设为$[0,m-1]$,每个原子可能对应多个长度为3的$ACGT$.设$n$为DNA ...
- CSS的初了解(更新中···)
在前面,我们学习了html的结构.基本骨架.起名方式和选择器,接下来,我们就要学习CSS了. 首先,我们要知道CSS是什么. CSS 全称叫层叠样式表,作用是给html添加样式style,添加属性. ...
- 【做题】neerc2017的A、C、I、L
A - Archery Tournament 一开始往化简公式的方向去想,结果没什么用. 考虑与一条垂线相交的圆的个数.不难YY,当圆的个数最多时,大概就是这个样子的: 我们稍微推一下式子,然后就能发 ...
- SQL Server 常见数据类型介绍
数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 整数类型 int 存储范围是-2,147,483,648到2,147,483,6 ...