随着数据的越来越多,系统也渐渐地慢起来了,我从网上简单看了一下,sqlserver2008有分区表这个概念了,下午就写了一个例子用来测试一下分区表的使用,首先我建立了两个表,一个用户信息表,一个电量信息表,用户信息表里边写入了100户居民,电量信息表里边写入了三年的每个用户的每小时一包的数据,数据都是随机生成的,只是为了让数据量更大一些。脚本和代码如下所示:
USE Partition_Test;
--我想创建两个表,第一个表是用户信息表 包含用户信息表和电量信息表
--第一个表包含的字段有 编号 用户姓名 用户编号
--第二个表包括 编号 起数 止数 差数电量 我想每个用户写入三年的电量 一个小时一包的话 100*365*3*24
--创建用户信息表
--CREATE TABLE YHXXB
--(
-- BH INT IDENTITY(1,1),
--YHXM CHAR(20),
--KHRQ DATETIME
--)
--电量信息表
--CREATE TABLE DLXXB(
--BH INT IDENTITY(0,1),
--YHBH INT,
--QS FLOAT,
--ZS FLOAT,
--CSDL FLOAT,
--SJRQ DATETIME
--)
--开始写入用户信息表
--INSERT INTO dbo.YHXXB
-- ( YHXM, KHRQ )
--VALUES ( '', -- YHXM - char(10)
-- '2015-07-30 06:17:01' -- KHRQ - datetime
-- )
--INSERT INTO dbo.DLXXB
-- ( YHBH ,
-- QS ,
-- ZS ,
-- CSDL ,
-- SJRQ
-- )
--VALUES ( 0 , -- YHBH - int
-- 0.0 , -- QS - float
-- 0.0 , -- ZS - float
-- 0.0 , -- CSDL - float
-- '2015-07-30 06:53:09' -- SJRQ - datetime
-- )
SELECT * FROM dbo.DLXXB WHERE SJRQ BETWEEN '2014-01-01' AND '2014-02-01';
<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace PARTITION_Test
{
class Program
{
/// <summary>
/// 获取随机数
/// </summary>
/// <returns></returns>
public static int FunctionGetRand()
{
int Int_Rand;
Random ro = new Random(10);
long tick = DateTime.Now.Ticks;
Random ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
Int_Rand = ran.Next(50, 65536);
return Int_Rand;
}
static void Main(string[] args)
{
//首先添加用户信息表 写入一百户数据
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "server=.;database=Partition_Test;user id=sa;password=afanti";
try
{
conn.Open();
// SqlCommand cmd_InsertYHXX = new SqlCommand();
// cmd_InsertYHXX.Connection = conn;
// for (int i = 0; i < 100; i++)
// {
// cmd_InsertYHXX.CommandText = "INSERT INTO dbo.YHXXB\r\n" +
// "( YHXM, KHRQ )\r\n" +
//"VALUES ( '"+"测试用户00"+ (i+1).ToString()+"', -- YHXM - char(10)\r\n" +
// " '"+ DateTime.Now.ToString()+"' -- KHRQ - datetime\r\n" +
// ")";
// cmd_InsertYHXX.ExecuteNonQuery();
// }
// Console.WriteLine("用户信息添加成功!");
//添加电量信息 我就从2013年的1月1日起开始添加
//首先查询出所有的用户信息
SqlCommand cmd_YHXXQuery = new SqlCommand();
cmd_YHXXQuery.Connection = conn;
cmd_YHXXQuery.CommandText = "SELECT * FROM dbo.YHXXB;";
SqlCommand cmd_InsertDLXX = new SqlCommand();
cmd_InsertDLXX.Connection = conn;
SqlDataAdapter sda_Query = new SqlDataAdapter(cmd_YHXXQuery);
DataSet ds = new DataSet();
sda_Query.Fill(ds,"YHXXB");
string Str_YHBH = string.Empty; //用户编号
DateTime dt_Start = Convert.ToDateTime("2013-01-01");
for (int i = 0; i < ds.Tables["YHXXB"].Rows.Count; i++)
{
Str_YHBH = ds.Tables["YHXXB"].Rows[i][0].ToString().Trim();//用户编号
dt_Start = Convert.ToDateTime("2013-01-01");
for (int j = 1; j <= 26280; j++)
{
cmd_InsertDLXX.CommandText = "INSERT INTO dbo.DLXXB\r\n"+
" ( YHBH ,\r\n" +
" QS ,\r\n" +
"ZS ,\r\n" +
"CSDL ,\r\n" +
" SJRQ\r\n" +
" )\r\n" +
"VALUES ( "+ Str_YHBH+" , -- YHBH - int\r\n" +
" " + FunctionGetRand() + " , -- QS - float\r\n" +
"" + FunctionGetRand() + " , -- ZS - float\r\n" +
"" + FunctionGetRand() + ", -- CSDL - float\r\n" +
"'"+ dt_Start.ToString()+"' -- SJRQ - datetime\r\n" +
")";
cmd_InsertDLXX.ExecuteNonQuery();
dt_Start = dt_Start.AddHours(1);
}
Console.WriteLine(Str_YHBH+"电量信息添加成功!");
}
Console.WriteLine("所有信息添加成功!");
Console.ReadLine();
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
}
}</span>
我的机器配置还是很高的,大概跑了两个小时。
回来再接着讲分区表的使用。