千万数据多表查询分页 100EastonSoft]

发布时间:2016-12-8 19:51:59 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"千万数据多表查询分页 100EastonSoft]",主要涉及到千万数据多表查询分页 100EastonSoft]方面的内容,对于千万数据多表查询分页 100EastonSoft]感兴趣的同学可以参考一下。

我是一个学生,现在我要做一个千万数据多表查询的习题。 想了好久都没有想出什么好的解决方案。 哪位大哥能帮助下,大家互相学习。 表1[Table1] 字段:  [id] [int] IDENTITY(1,1) NOT NULL,  [k] [varchar](50) NOT NULL,  [d] [datetime] NOT NULL 表2[Table2] 字段:  [id] [int] IDENTITY(1,1) NOT NULL,  [t3_Id] [int] NOT NULL,  [t1_Id] [int] NOT NULL,  [date] [datetime] NOT NULL 表3[Table3]  [id] [int] IDENTITY(1,1) NOT NULL,  [title] [varchar](50) NOT NULL,  [conten] [varchar](50) NOT NULL,  [date] [datetime] NOT NULL 表1存放的是关键字,表3存放的是文章,表2存放的是文章中包含的关键字 根据关键字查询 declare @t1_Id int; Select @t1_Id = id from Table1 where k = 'test1' Select t3.title,t3.conten from Table2 t2,Table3 t3 where t2.t1_Id = @kt_Id and t3.id = t2.t3_Id 假如我这个数据库中有一千多万以上的数据量,我需要根据关键字快速查询,并且分页。 请问如何查询和分页效率。

/*通用分页存储过程*/ USE HotelManagementSystem GO IF EXISTS(SELECT * FROM sys.objects WHERE NAME='cndoup_GetPageOfRecords')   DROP PROCEDURE cndoup_GetPageOfRecords GO --创建存储过程 CREATE PROCEDURE cndoup_GetPageOfRecords   @pageSize int = 20,                                                --分页大小   @currentPage int ,                                                 --第几页   @columns varchar(1000) = '*',                            --需要得到的字段    @tableName varchar(100),                                     --需要查询的表       @condition varchar(1000) = '',                         --查询条件, 不用加where关键字   @ascColumn varchar(100) = '',                            --排序的字段名 (即 order by column asc/desc)   @bitOrderType bit = 0,                                         --排序的类型 (0为升序,1为降序)   @pkColumn varchar(50) = ''                                 --主键名称 AS BEGIN                                                                                    --存储过程开始   DECLARE @strTemp varchar(300)   DECLARE @strSql varchar(5000)                            --该存储过程最后执行的语句   DECLARE @strOrderType varchar(1000)                --排序类型语句 (order by column asc或者order by column desc)   BEGIN     IF @bitOrderType = 1                --降序       BEGIN         SET @strOrderType = ' ORDER BY [email protected]+' DESC'         SET @strTemp = '<(SELECT min'       END     ELSE                  --升序       BEGIN         SET @strOrderType = ' ORDER BY [email protected]+' ASC'         SET @strTemp = '>(SELECT max'       END     IF @currentPage = 1            --第一页       BEGIN         IF @condition != ''           SET @strSql = 'SELECT TOP '+STR(@pageSize)+' [email protected]+' FROM [email protected]+             ' WHERE [email protected][email protected]         ELSE           SET @strSql = 'SELECT TOP '+STR(@pageSize)+' [email protected]+' FROM [email protected][email protected]       END     ELSE                  -- 其他页       BEGIN         IF @condition !=''           SET @strSql = 'SELECT TOP '+STR(@pageSize)+' [email protected]+' FROM [email protected]+           ' WHERE [email protected]+' AND [email protected][email protected]+'([email protected]+')'+' FROM (SELECT TOP '+STR((@currentPage-1)[email protected])+           ' [email protected]+' FROM [email protected][email protected][email protected]+') AS TabTemp)[email protected]         ELSE           SET @strSql = 'SELECT TOP '+STR(@pageSize)+' [email protected]+' FROM [email protected]+           ' WHERE [email protected][email protected]+'([email protected]+')'+' FROM (SELECT TOP '+STR((@currentPage-1)[email protected])+' [email protected]+           ' FROM [email protected][email protected]+') AS TabTemp)[email protected]       END   END   EXEC (@strSql) END  

nnd ,我刚才回帖,居然说该帖子不存在

引用 2 楼 js_szy 的回复:nnd ,我刚才回帖,居然说该帖子不存在 可能是我移动了帖子

建立索引会快很多

上一篇:[推荐] 【SQL SERVER中关于大容量数据的导入导出总结】 100feixianxxx]
下一篇:有关查询字段中存储的多字段问题 40shuql]

相关文章

相关评论