一、SQL Server 分页

 --top not in方式
select top 条数 * from tablename
where Id not in (select top 条数*页数 Id from tablename) --ROW_NUMBER() OVER()方式
select * from (
    select *, ROW_NUMBER() OVER(Order by Id ) AS RowNumber from tablename
  ) as b
  where RowNumber BETWEEN 当前页数-1*条数 and 页数*条数 --offset fetch next方式
--SQL2012以上的版本才支持
select * from tablename
order by Id offset 页数 row fetch next 条数 row only 分析:在数据量较大时 top not in方式:查询靠前的数据速度较快 ROW_NUMBER() OVER()方式:查询靠后的数据速度比上一种较快 offset fetch next方式:速度稳定,优于前2种,但sql版本限制2012及以上才可使用

模拟测试

--1、首先创建了一张TestAdmin表,主键为ID字段int类型且自增
create table TestAdmin (
Id int identity(1,1) primary Key,
Name varchar(Max),
Age int
) --2、接着批量导入1000条模拟数据 declare @count int
--这里定义模拟数据条数
set @count=1000 while(@count>0)
begin
insert into TestAdmin (Name,Age) values ('zhuyuan'+convert(varchar,@count),@count)
set @count=@count-1
end --3查询数据集
select * from TestAdmin

  

c#中linq分页查询

最近需要对客户的系统进行升级,在对一张记录只有7767条记录的表进行分次查询时,每次查询500条,16次查询居然使用了2分钟时间。代码如下:

public static List<T> GetList(int pageIndex, int pageSize, out int count)
{
using (var db = new ClientDBDataContext(DBHelper.DBConString))
{
var query = db.DataBase_Table; count = query.Count();
return query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
}
} 调试结果显示,一次比一次查询的时间长,到第14次查询时,耗时20s之多,不忍直视,那还有记录达到百万条的又该如何??? 查看DataBase_Table的LINQ扩展时,发现了AsParallel(),查看说明:启用查询的并行化。 public static List<T> GetList(int pageIndex, int pageSize, out int count)
{
using (var db = new ClientDBDataContext(DBHelper.DBConString))
{
var query = db.DataBase_Table.AsParallel(); count = query.Count();
return query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
}
} 运行,整个16次查询不到1s。

  看来代码的优化在某些时候是非常重要的……

  

二、SQLServer、Oracle获取数据库、表、表里字段、类型、注释

--获取所有非系统数据库
select name from master..sysdatabases where name not in('master', 'model', 'msdb', 'tempdb', 'northwind', 'pubs', 'ReportServer', 'ReportServerTempDB') --获取某个表的详细字段信息
select c.name,t.name,c.prec,p.value from syscolumns c
inner join systypes t on c.xtype= t.xtype
inner join sysobjects o on c.id= o.id
inner join sys.extended_properties p on c.id = p.major_id and c.colid = p.minor_id
where o.xtype='u'and t.status=0 and o.name='表名' --获取所有表信息
select * from sysobjects where XType='U' --字段信息,关联表id=syscolumns.id
select * from syscolumns --注释信息,关联字段信息major_id=syscolumns.id
select * from sys.extended_properties --主键自增信息,关联id =syscolumns.id
select * from sysindexkeys
select * from sysindexes --表详细信息(字段名,类型,长度,是否是主键,是否是标识,允许空,注释)
select a.name N'字段名', b.name N'类型',
COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'长度',
(case when (select count(*) from sysobjects
where (name in (select name from sysindexes
where (id = a.id) AND (indid in (select indid from sysindexkeys
where (id = a.id) AND (colid in (select colid from syscolumns
where (id = a.id) AND (name = a.name))))))) AND (xtype = 'PK'))>0 then 'PK' else '' end) N'主键',
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 'identity'else '' end) N'标识',
(case when a.isnullable=1 then 'true'else 'false' end) N'允许空',
isnull(g.[value],'') AS N'注释'
from syscolumns a
left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sys.extended_properties g
on a.id=g.major_id AND a.colid = g.minor_id
where d.name='表名'
order by a.colorder

  

三、Oracle:

--获取当前用户所有的表
SELECT * FROM user_tables --获取所有列,列信息
SELECT * FROM user_tab_columns --2个视图中分别存储了当前用户的表信息
--user_tab_columns:表中列的详情,但是没有是否是主键的标识
--user_cons_columns:约束视图。
SELECT utc.COLUMN_NAME as 列名,ucc.COLUMN_NAME AS 主键, utc.DATA_TYPE as 列类型,utc.DATA_LENGTH as 类型长度,utc.NULLABLE as 是否可为空 FROM user_tab_columns utc
left join user_cons_columns ucc on utc.TABLE_NAME = ucc.TABLE_NAME
where POSITION=1 AND ucc.TABLE_NAME ='你的表名'
ORDER by utc.COLUMN_ID --user_col_comments:注释

  

二、SQL Server 分页的更多相关文章

  1. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  2. SQL server分页的四种方法

    SQL server分页的四种方法 1.三重循环: 2.利用max(主键); 3.利用row_number关键字: 4.offset/fetch next关键字 方法一:三重循环思路  先取前20页, ...

  3. SQL server分页的四种方法(算很全面了)

      这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本.下面都用pageIndex表示页数,pageSize表示一页包含的记录.并且下面涉及到具体例子的,设定查询第2 ...

  4. SQL SERVER 分页方法

    最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的 ...

  5. SQL Server分页模板

    SQL Server分页模板 WITH T AS ( SELECT ROW_NUMBER() OVER(ORDER BY AlbumId ) AS row_number, * FROM (SELECT ...

  6. SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条

    SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...

  7. 解决hibernate对Sql Server分页慢的问题

    一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...

  8. SQL Server 分页方法汇总

    PageSize = 30 PageNumber = 201 方法一:(最常用的分页代码, top / not in) UserId UserId from UserInfo order by Use ...

  9. SQL Server 分页语句

      表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable ...

随机推荐

  1. flask之表单

    一:表单 表单用于注册,修改用户数据等场景. flask-wtf提供了一个包,可以创建表单:pip install flask-wtf 为了防止跨域请求,flask_wtf自己生成一个秘钥,用秘钥生成 ...

  2. [洛谷P1353] 跑步Running

    问题描述 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑.在每分钟的开始,贝茜会选择下一分钟是用来跑步 ...

  3. 状态管理Vuex的使用总结

    1.Vuex.store 的基本使用 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. Vu ...

  4. IDEA搭建spingboot项目

    1.Springboot2.x是依赖于JDK1.8及以上版本的.因此先在电脑上安装JDK1.8,由于公司的项目用的是JDK1.7,所以要在JDK1.7的基础上在安装JDK1.8,让两者同时存在于电脑上 ...

  5. vue路由vue-router的安装和使用

    1.安装,如果你没有在创建项目时候选择的情况下  cnpm install vue-router 2.使用    假设App为根组件,两个自定义组件home及list main.js里操作 impor ...

  6. 基于ES6的tinyJquery

    原文地址:Bougie的博客 jQuery作为曾经Web前端的必备利器,随着MVVM框架的兴起,如今已稍显没落.但它操作DOM的便利性无出其右.我用ES6写了一个基于class简化版的jQuery,包 ...

  7. videojs实践--兼容ie7,8

    1,还是先上图 ie9+,ff,chrome,,,

  8. HttpClient配置及示例代码

    HttpComponents是Apache 旗下的项目.其中有一个HttpClient,即HTTP客户端. ... ... 大多时候我们只需要HttpClient,httpCore是开发服务端的我们可 ...

  9. PowerShell 字符串操作--转载

    格式化操作符 –F 在PowerShell文本操作符中非常重要,经常被用来增强数字类型和日期类型的可读性: "{0} diskettes per CD" -f (720mb/1.4 ...

  10. http://research.google.com/archive/mapreduce.html

    http://research.google.com/archive/mapreduce.html