http://www.cnblogs.com/Leo_wl/p/4921799.html

SELECT TOP  * FROM users WHERE nID> And nID< ORDER BY nID DESC;

SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY nID asc) AS rownum,* FROM users Where nID> And nID< ) AS D
WHERE rownum> AND rownum<;
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY nID asc) AS rownum,* FROM users Where nID> And nID< ) AS D
WHERE rownum BETWEEN AND ;

他们的不同之处在于“提取N条记录”的这个操作,Top N和 WHERE rownum>0 AND rownum<31。

它们具体是如何运行我讲不出理论,但是我可以做个比方:

体育老师让我们跑30步的距离,Top N的做法就是跑30步,自己边跑边数;WHERE rownum>0 AND rownum<31 相当于老师在30步的位置花了个标记,你只管死跑,到了那个标记就相当于跑了30步。我想做了标记死跑这个要快点吧,:)

在查询列表时,不要将查询总条数与查询列表数据一起执行,应分开查询,这样效果会提升
        public string GetCommentCountSql(MQueryCommentsReqParam model)
{
var sql = string.Empty;
string where = GetWhereSql(model);
sql = string.Format(@"SELECT COUNT(1) FROM dbo.VipCommentProduct {0}", where);
return sql;
} private static string GetWhereSql(MQueryCommentsReqParam model)
{ string where = string.Empty;
var queryItems = new List<string>(); if (!string.IsNullOrEmpty(model.CommentIds))
{
queryItems.Add(model.CommentIds.IndexOf(',') >
? string.Format(" Id in ({0})", model.CommentIds)
: string.Format(" Id={0}", model.CommentIds));
}
else
{ //会员号
if (model.UserId != null && model.UserId > )
{
queryItems.Add(string.Format(" UserId={0}", model.UserId));
}
//会员昵称
if (!string.IsNullOrEmpty(model.ShowNickName))
{
queryItems.Add(string.Format(" charindex('{0}',ShowNickName) > 0", model.ShowNickName));
}
//订单号
if (model.OrderId != null && model.OrderId > )
{
queryItems.Add(string.Format(" OrderId={0}", model.OrderId));
}
//商品查询条件(商品名或商品
if (!string.IsNullOrEmpty(model.ProductCondition))
{
var regex = new Regex(@"^\d+$"); //正则 判断为数字
if (regex.IsMatch(model.ProductCondition))
{
queryItems.Add(string.Format(" ProductId='{0}'", model.ProductCondition));
}
else //为字符串
{
queryItems.Add(string.Format(" ProductName like '%{0}%'", model.ProductCondition));
}
}
//评论内容
if (!string.IsNullOrEmpty(model.ContentInfo))
{
queryItems.Add(string.Format(" charindex('{0}',ContentInfo) > 0", model.ContentInfo));
}
//评分
if (model.Score != null && model.Score > )
{
queryItems.Add(string.Format(" Score={0}", model.Score));
}
//精华,1:精华
if (model.IsHighLight != null && model.IsHighLight > -)
{
queryItems.Add(string.Format(" IsHighLight={0}", model.IsHighLight));
}
//是否有图
if (model.HasPic != null && model.HasPic > -)
{
if (model.HasPic == ) //无图
{
queryItems.Add(" UserImgObj is null");
}
if (model.HasPic == ) //有图
{
queryItems.Add(" UserImgObj is not null");
}
}
//是否追评
if (model.HasReComment != null && model.HasReComment > -)
{
if (model.HasReComment == ) //无追评
{
queryItems.Add(" ParentId =0");
}
if (model.HasReComment == ) //有追评
{
queryItems.Add(" ParentId >0");
}
}
//审核状态:1:未审核,2:审核通过,3:审核未通过
if (model.CheckState != null && model.CheckState > )
{
queryItems.Add(string.Format(" CheckState={0}", model.CheckState));
}
//审核人
if (!string.IsNullOrEmpty(model.CheckUser))
{
queryItems.Add(string.Format(" CheckUser='{0}'", model.CheckUser));
}
//是否回复
if (model.HasReply != null && model.HasReply > -)
{
if (model.HasReply == ) //未回复
{
queryItems.Add(" ReplyContent is null");
}
if (model.HasReply == )
{
queryItems.Add(" ReplyContent is not null");
}
}
//回复人
if (!string.IsNullOrEmpty(model.ReplyUser))
{
queryItems.Add(string.Format(" ReplyUser='{0}'", model.ReplyUser));
}
if (model.PeriodTimeType != null && model.PeriodTimeType > && (model.StartTime != null || model.EndTime != null))
{
var periodDic = new Dictionary<int?, string>()
{
{,"CheckTime"}, //审核时间
{,"AddTime"}, //评论时间
{,"ReplyTime"} //回复时间
};
if (model.StartTime != null && model.EndTime == null)
{
queryItems.Add(string.Format(" " + periodDic[model.PeriodTimeType] + ">'{0}'", model.StartTime));
}
if (model.EndTime != null && model.StartTime == null)
{
queryItems.Add(string.Format(" " + periodDic[model.PeriodTimeType] + "<'{0}'", model.EndTime));
}
if (model.StartTime != null && model.EndTime != null)
{
queryItems.Add(string.Format(" (" + periodDic[model.PeriodTimeType] + ">'{0}' and " + periodDic[model.PeriodTimeType] + "<'{1}')", model.StartTime, model.EndTime));
}
} } if (queryItems.Any())
{
where = "where " + string.Join(" and ", queryItems.ToArray());
}
return where;
}
												

论Top与ROW_NUMBER读取第一页的效率问题及拼接sql查询条件的更多相关文章

  1. 论Top与ROW_NUMBER读取第一页的效率问题

    10.29 前一段时间研究关于分页的问题,由于数据库属于百万级的,考虑了关于优化方面的问题.其中一个考虑是:第一页展现的频率肯定是最高的,所以我想第一页就使用Top N来读取. 这个想法本身是没有错, ...

  2. Top与ROW_NUMBER

    论Top与ROW_NUMBER读取第一页的效率问题   前一段时间研究关于分页的问题,由于数据库属于百万级的,考虑了关于优化方面的问题.其中一个考虑是:第一页展现的频率肯定是最高的,所以我想第一页就使 ...

  3. INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页

    INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页 作者:xin 日期:2005-09-23 字体大小: 小 中 大   VPatch 在 INNO 中的应用. VPatch 属于专为NS ...

  4. python使用get在百度搜索并保存第一页搜索结果

    python使用get在百度搜索并保存第一页搜索结果 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用在意我的感受 #coding:utf-8 import ur ...

  5. ViewPagerWithImageDemo【ViewPager如何判断滑动到第一页和最后一页以及弹出对话框功能】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录viewpager滑动的时候弹出对话框的功能(关键功能是滑动弹出对话框后,隐藏对话框的时候当前页可以还原到原位置),顺便判断首页 ...

  6. php分页数据最后一页继续追加第一页数据

    之前做数据分页遇到这样一个需求,就是数据到最后一页的时候不能中断,继续把第一页的数据追加到后面,无限显示下去. 原文地址:代码汇个人博客 http://www.codehui.net/info/23. ...

  7. bootstrapTable刷新当前页码不变和从第一页开始查询

    function searchAgencyProject(){ $("#statisticalProjectListTable").bootstrapTable('refresh' ...

  8. word2003设置页码不从第一页开始的方法

    问题描述:如果你想设置页码从第三四页开始,前边不要页码,或者前边的页码是不同类型的.那么这个时候就要用到:插入->分隔符模式. 如果你的页面中的各个标题是从样式和格式中选择的,既是你先设置好各种 ...

  9. Word中摘要和正文同时分栏后,正文跑到下一页,怎么办?或Word分栏后第一页明明有空位后面的文字却自动跳到第二页了,怎么办?

    问题1:Word中摘要和正文同时分栏后,正文跑到下一页,怎么办?或Word分栏后第一页明明有空位后面的文字却自动跳到第二页了,怎么办? 答:在word2010中,菜单栏中最左侧选“文件”->“选 ...

随机推荐

  1. Java操作excel表格

    (1)Java读取excel表格 package com.songyan.excel; import java.io.File; import java.io.FileInputStream; imp ...

  2. Codeforces Round #344 (Div. 2) E. Product Sum 维护凸壳

    E. Product Sum 题目连接: http://www.codeforces.com/contest/631/problem/E Description Blake is the boss o ...

  3. Unicode中的BOM

    BOM简述 BOM是byte order mark的缩写,在UTF-16和UTF-32中需要使用BOM来区分字节的顺序,因为我们目前的CPU有两种系列,一种是大端模式,一种是小端模式(我们常用的电脑手 ...

  4. jQuery旋转插件—rotate

    jQuery旋转插件,支持Internet Explorer 6.0+ .Firefox 2.0 .Safari 3 .Opera 9 .Google Chrome rotate(angle) 正值表 ...

  5. Oracle的sqlnet.ora文件配置

    DBA对这个文件一定不会陌生,大家了解最多的也一定是sqlnet.ora用来决定oracle怎么解析一个连接中出现的字符串,例如: sqlplus sys/oracle@orcl 那么这个orcl怎么 ...

  6. 网页中输出漂亮格式的Php数组神器

    写网页的时候经常需要在页面中打印数组,但格式特别难看,看看一个html神器吧<pre>标签,能非常标准的显示数组格式 使用的时候只需要这样打印你的数组就OK了,太好用了,神器! 只需要两句 ...

  7. Objective-C:KVC机制

    KVC:key value coding    键值对的编码 功能:用来给对象属性设置值或者取出对象属性的值.虽然getter和setter方法也是该功能,但是如果类中没有设置属性特性或者重写这两个方 ...

  8. 摄像头模组 AWB(Auto White Balance)

    本文转载yapingmcu的<图像算法---白平衡AWB(讲的很好)>.原文http://blog.csdn.net/yapingmcu/article/details/50637797 ...

  9. ISP图像调试工程师——tone Mapping(ISP)

    http://www.cnblogs.com/bigbigtree/p/3458797.html

  10. 解决phpcms使用php7.1.9时修改后台菜单错误 "[] operator not supported for strings"错误提示

    出现这个错误提示是因为 $array 在初始化的时候是一个字符串,在下面使用的时候作为数组使用,php7.x版本并没有将$array自动转换为 数组而是以字符串存在"[]"作为了运 ...