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. Android:布局实例之模仿京东登录界面

    预览图及布局结构参考: 布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout ...

  2. Codeforces Round #127 (Div. 1) B. Guess That Car! 扫描线

    B. Guess That Car! 题目连接: http://codeforces.com/contest/201/problem/B Description A widely known amon ...

  3. Distinctive Image Features from Scale-Invariant Keypoints(个人翻译+笔记)-介绍

    Distinctive Image Features from Scale-Invariant Keypoints,这篇论文是图像识别领域SIFT算法最为经典的一篇论文,导师给布置的第一篇任务就是它. ...

  4. winform窗体MaximizeBox

    如果MaximizeBox为false会导致Form2窗体底部不显示. =>解决办法TopMost属性为true. Form2 _frm2 = new Form2(); _frm2.Maximi ...

  5. KEIL、uVision、RealView、MDK、KEIL C51之间比较

    KEIL uVision,KEIL MDK,KEIL For ARM,RealView MDK,KEIL C51,KEIL C166,KEIL C251 从接触MCS-51单片机开始,我们就知道有一个 ...

  6. ECMAScript 6(ES6)常用语法

     一:Let和const (1)Let定义块级作用域的变量,var定义的变量会提升.Let不会提升. 如下.var可以先用,打印是undefined但是let在定义之前是不能用的. 会报错Uncaug ...

  7. RMAN冗余备份概念与方法

    冗余备份概念 RMAN提供了一种更谨慎的备份策略:duplexed方式备份,其实质就是在生成备份集的同时,向指定位置copy指定份数(最大不超过4)的备份集复制,以避免在灾难性事故时数据库损坏和备份丢 ...

  8. Jpeglib读取jpg文件 【转】

    http://blog.csdn.net/blues1021/article/details/45424695 整理自 : http://hi.baidu.com/lewutian/item/e8ee ...

  9. global constructor

    HQ在要求我们修改code style后,又让我检查并去掉"global constructor". 第一次听说这玩意,就研究了一下.发现网上有人讨论的很精彩,就记下来. “glo ...

  10. 安装程序集'' policy.8.0.microsoft.vc80.atl,type=''win32-

    ThinkPad Bluetooth with Enhanced Data Rate II 软件 在Windows 7 64-bit 下无法安装完成,弹出窗口提示 :安装程序集''policy.8.0 ...