`
henghengdh
  • 浏览: 153411 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分表查询(存储过程) (转)

阅读更多
前提,数据库每天会新建一张表,由于数据量非常大,表的数据结构是一样的。

下面这个存储过程是返回一条SQL语句的。

我们传入的是两个时间,得到的是查询这段时间内的数据的一个SQL语句。

Create Procedure Search

@date1 datetime,  --起始时间

@date2 datetime   --终止时间

as

declare @date1New datetime,

             @rq  varchar(6),

             @i  int , --记录循环次数

             @s varchar(5000)  --根据表多少 可以扩大它

set @rq = convert(varchar,@date1,12)--把时间格式化,比如2008-06-20变成080620

--set @rq = select convert(varchar,@date1,12)是完全错误的,select的作用是显示,不是传值

set @s = 'select * from MainTable' + @rq  --初始化@s='select * from MainTable080620' 这样第一个表就有了

set @i = datediff(d,@date1,@date2)  --日期相减,按日计算

while @i > 0

begin

--如果是非常重要的系统可以在这里加上该物理表是否存在的语句

--以下是对于2000来讲,2008已经不存在于这个系统表里面了。其中IsUserTable是指表名。

--sql2000

--if   exist( select * from dbo.sysobjects where id = object_id(N'c')  and OBJECTPROPERTY(id,N'IsUserTable')=1)

--sql2008

--if exist( select * from dbo.sysobjects where name='IsUserTable')

--begin

--select '存在'

--end

--else

--begin

--select '不存在'

--end

set @date1New = dateadd(day,@i,@date1)

set @rq=convert(varchar,@date1New,12)

--如果是按月进行查询就修改上面,把d改成m

set @s = @s + 'union all select * from MainTable' + @rq

set @i = @i -1 --累加

end

select @s

end

例如:我们的表名叫作:MainTable+yymmdd,如MainTable100406,MainTable100407。。。

那么当我们传入2010-04-06和2010-04-08,那么这个存储成功执行之后的结果会是:

select * from MainTable100406

union all

select * from MainTable100407

这个存储过程在对会大数据量的时候,大系统利用分表来处理数据量的时候非常有用。
分享到:
评论

相关推荐

    MSSQLServer数据库大量数据按月份分表、存储过程指定时间段跨表分页查询

    资源里包含SQL文档:创建数据库和存储过程.sql 生成数据.sql 测试.sql 比较完善的大量数据分表功能代码,包含...数据按照每个月创建一个数据表,通过存储过程输入参数,按照指定日期跨表查询数据,并且可以分页查询。

    mysql 用存储过程 备份分表

    1、修改表名 2、创建新表 3、按时间条件插入数据 由于数据太大、用的改表名的方式备份分表,通过传入表名和条件字段名备份相应的表

    oracle 查询从分表取数据

    一个简单的oracle数据库环境下的存储过程,介绍了如何从带年月人的分表取数据

    MySQL动态创建表,数据分表的存储过程

    MySQL动态创建表,数据分表的存储过程,需要的朋友可以参考下。

    杰奇小说系统分站分表手机版模板

    杰奇小说系统分站分表手机版模板,支持分表、多站点

    使用MYSQL5创建存储过程procedure

    这是MYSQL5数据库服务器中存储过程实现部分的分过程控制程序.运用了PLSQL语言来达MYSQL数据库中分表功能,体现了系统的整体性能...

    mysql存储过程--根据主表创建一张副表导入数据(分表)

    在存储过程中,根据一张主表去创建一张副表。 在根据需要限制的时间,查询主表里面的数据。将主表的数据插入到新建的副表里面同时将主表的数据删除,使用事物进行控制操作的过程

    数据库分表处理设计思想和实现

    分表是个目前算是比较炒的比较流行的概念,特别是在大负载的情况下,分表是一个良好分散数据库压力的好方法。 首先要了解为什么要分表,分表的好处是什么。我们先来大概了解以下一个数据库执行SQL的过程: 接收到...

    oracle存储过程学习经典入门

    oracle存储过程学习经典入门,包含各种 oracle性能调优的方法、如何数据库分区、分表等等、读写分离、主从模式等等oracle常见的操作模式

    mysql数据库分表分库的策略

    分表的目的就在于此,减小数据库的负担,缩短查询时间。日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下...

    在Oracle数据库里用存储过程定期分割表

    Oracle数据库里存放着各种各样的数据,其中有一些数据表会随着时间的推移,越来越大。这样的信息又和时间紧密相关,有没有办法让这些日志表能到时间自动分割成历史年月的表呢? 本文介绍了用存储过程定期分割表的方法。

    SQL Server常用存储过程及示例

    以下是对SQL Server中常用的存储过程进行了介绍。需要的朋友可以过来参考下

    PostgreSQL分区表(partitioning)应用实例详解

    项目中有需求要垂直分表,即按照时间区间将数据拆分到n个表中,PostgreSQL提供了分区表的功能。分区表实际上是把逻辑上的一个大表分割成物理上的几小块,提供了很多好处,比如: 1、查询性能大幅提升 2、删除历史...

    golang gorm 操作mysql及gorm基本用法

    golang 官方的那个操作mysql的有点麻烦所以就使用了gorm,下面就gorm的使用做下简单介绍,感兴趣的朋友跟随小编一起看看吧

    MySQL数据库优化之分表分库操作实例详解

    垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断...

    一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed

    一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed

    Mysql数据库优化笔记(细节决定成败)

    对mysql优化时一个综合性的技术...e: 存储过程 [模块化编程,可以提高速度] f: 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)

    MySQL 分表优化试验代码

    这里的分表逻辑是根据t_group表的user_name组的个数来分的。因为这种情况单独user_name字段上的索引就属于烂索引。起不了啥名明显的效果。1、试验PROCEDURE.DELIMITER $$DROP PROCEDURE `t_girl`.`sp_split_table`$$...

    实战:上亿数据如何秒查

    从修改SQL查询语句逻辑到决定创建存储过程实现,花了我3天多的时间,在此总结一下,希望对朋友们有帮助。  数据背景  首先项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据...

    大型网站技术架构演变过程

    技术架构演变过程目录 1.架构演变第一步:物理分离webserver和数据库。 2.架构演变第二步:增加页面缓存 3.架构演变第三步:增加页面片段缓存 4.架构演变第四步:数据缓存 5.架构演变第五步: 增加webserver,应用...

Global site tag (gtag.js) - Google Analytics