sqlserver还原数据库 数据库怎么获取某一天内数据库中的数据量(有多少条数据)c++编程怎么实现

sql2008数据库,九百万条数据,如何快速查询?_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
sql2008数据库,九百万条数据,如何快速查询?
各位大大帮忙解决一下把~~~
只做查询,而且是select * 查询全部九百万条数据,每3天就要执行一次,
1.存储过程的话用时3分钟,
2.索引我放到ID上了,用时1分零六秒(只查询ID),可程序中需要查询每行的所有数据(共4列)。新建索引了,但不太会用。。
首先,检索数据是为了通过检索的结果,得到讯息,如流水记录、对比记录、统计表格。而,一个表格显示900W条记录,检索人很难从中获取需要的讯息。所以,实际应用不会一次性检索大量的数据,而是从大量的数据中筛选一部份数据,或是对大量的数据进行统计计算。决定检索速度的因素有:1、表格设计对检索的影响:如合理的主键即索引设计。2、检索语句的效率:如子句的应用、数据的分组、排序、筛选 等等。3、数据库管理系统的配置:包括硬件配置、软件配置。
也不能一次性把9百万数据一次性取回:分批取回--可以根据id列值进行分批;将数据直接在服务端存成文本再传回本地处理)。 &quot。另外,你程序不要一次性取那么多数据返回,效率很低下)。“真正部署到电力网的服务器上速度会不会提高呢”------------------------服务器当然比你本地要快得多啦,硬件配置根本就不同一个级别,但不管怎样,还是建议你参考上面的建议优化你的处理逻辑才行,要提高效率的办法就是:1、提高硬盘的io速度;2、增加内存以使sql server有更多的缓存;而是需要根据这些数据逐一进行其他功能的操作,你也是得优化你现在的处理逻辑(现有处理逻辑我觉得不合理,这款程序是不联网的&--------------------------------就算这样的话。或者你把处理逻辑写在存储过程,然后由SQL SERVER本身去完成逻辑处理。总之,不管怎样,如果你非要取出来再操作的话,那你得考虑分批去取,这样会拖死的,建议你考虑变换下处理逻辑(如;、“查询全部九百万条数据”-------------------------------这样的需求跟索引没有关系了(因为已经肯定是走全表扫描的了)根据你说的需求:&可程序中需要查询每行的所有数据&quot
本回答被提问者采纳
所以只能泛泛的说说我的想法。执行的时候通过多线程进行操作。因为不知道查询的目的,看看能否分割成多张百万记录的表。建议根据目的做成一个存储过程或函数。建议将这个表分割一下,根据实际情况,因为输出也是需要消耗大量时间的,将执行的结果输出处理,不要全部显示,然后才能针对目的做修改首先需要知道的是你查询全部记录的目的,具体的优化方案需要具体分析
900万条你撞到datatable里也显示不下,也没有人会用一页看900万条数据,你可以从数据库段就分页显示出来,一次只传1000或多少的,这样速度就不会慢了。你这样900的数据库,不是查询的问题,网络传输程序响应都是需要时间的,只能缩减届国际的大小还缩小时间。楼主建立索引了,但是是全表扫描其实没有where语句索引是基本排不上用场的,所以还是分页吧。每次取数据都是双top这样既可以用得上索引,又减少了返回数据集的大小。
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
sql2008的相关知识
换一换
回答问题,赢新手礼包当前位置:&&
本页文章导读:
&&&&?在C++中的ODBC API数据库编程&&&&&&在C++中的ODBC API数据库编程一、动态加载数据源1、通过修改注册表加载数据源:&用户数据源:HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI&系统数据源:HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI.........&&&&?基于MS SQLServer的全表搜索&&&&&&最近在做项目的时候遇到一个问题,就是在查找记录的时候输入关键字找出满足条件的记录。一开始是每一个字段一个关键字,后面感觉有的查找的时候会涉及到6个甚至更多的字段,感觉在.........&&&&?SQLSERVER 在局域网使用Windows身份验证连接局域网内的另一台SQL服务器(不是域环境)&&&&&&SQLSERVER 在局域网使用Windows身份验证连接局域网内的另一台SQL服务器(不是域环境)之前连MSDN都说连接局域网内的另一台SQL服务器如果要用Windows身份验证的话必须是&域环境&但是今天.........
[1]在C++中的ODBC API数据库编程
&&&&来源:&
& 发布时间:&
在C++中的ODBC API数据库编程一、动态加载数据源1、通过修改注册表加载数据源:&用户数据源:HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI&系统数据源:HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI对于不同类型的数据源,注册表的修改也不同,但基本上要修改两个地方,一个是在ODBC.INI子键下建立一个与数据源描述名同名的子键,并在该子键下建立与数据源配置相关的项;另一个是在\ODBC.INI\ODBC&Data Sources子键下建立一个新项以便告诉驱动程序管理器ODBC数据源的类型。2、通过ODBC&API加载:Windows系统子目录下的动态链接库ODBCinst.dll提供了一个可以动态增加、修改和删除数据源的函数SQLConfigDataSource,由于VC的默认库文件中不包含此函数,因此使用前需将ODBCinst.h文件包含在工程的头文件中,在工程的setting属性框Link页的Object/library module编辑框中增加ODBC32.lib,同时保证系统目录system32下有文件ODBCcp32.dll。3、文件数据源的连接:除了ODBC管理器,还可以通过SQLDriverConnect来添加文件数据源。二、ODBC&&API编程如果一个ODBC&API函数执行成功,则返回SQL_SUCCESS或SQL_SUCCESS_WITH_INFO,SQL_SUCCESS指示可通过诊断记录获取有关操作的详细信息,SQL_SUCCESS_WITH_INFO指示应用程序执行结果带有警告信息,可通过诊断记录获取详细信息。如果函数调用失败,返回码为SQL_ERROR。一般,编写ODBC程序主要有一下几个步骤:1、分配环境句柄:声明一个SQLHENV的变量,调用函数SQLAllocHandle。设置环境属性:完成环境分配后,用函数SQLSetEnvAttr设置环境属性,注册ODBC版本号。释放环境句柄:完成数据访问任务时,应调用SQLFreeHandle释放前面分配的环境。2、分配连接句柄:声明一个SQLHDBC类型的变量,调用SQLAllocHandle函数分配句柄。设置连接属性:所有连接属性都可通过函数SQLSetConnectAttr设置,调用函数SQLGetConnectAttr可获取这些连接属性的当前设置值。3、&&&连接数据源:对于不同的程序和用户接口,可以用不同的函数建立连接SQLConnect:该函数只要提供数据源名称、用户ID和口令,就可以进行连接了。SQLDriverConnect:该函数用一个连接字符串建立至数据源的连接,它可以让用户输入必要的连接信息,使用系统中还没定义的数据源。SQLBrowseConnect:该函数支持以一种迭代的方式获取到数据源的连接,直到最后建立连接,它基于客户机/服务器体系结构,因此本地数据库不支持该函数。4、&&&准备并执行SQL语句A、&&分配语句句柄:语句句柄是通过调用SQLAllocHandle函数分配的。函数SQLGetStmrrAttr和SQLSetStmrrAttr用来获取和设置一个语句句柄的选项,使用完,调用SQLFreeHandle释放该句柄。B、&&执行SQL语句SQLExecDirect:该函数直接执行SQL语句,对于只执行一次的SQL语句来说,该函数是执行最快的方法。SQLPrepare和SQLExecute:对于需要多次执行的SQL语句来说,可先调用SQLPrepare准备SQL语句的执行,用SQLExecute执行准备好的语句。C、&&使用参数:使用参数可以使一条SQL语句多次执行,得到不同的结果。函数SQLBindParameter负责为参数定义变量,将一段SQL语句中的一个参数标识符("?")捆绑在一起,实现参数值的传递。5、&&&获取记录集A、&&&绑定列:首先必须分配与记录集中字段相对应的变量,然后通过函数SQLBindCol将记录字段同程序变量绑定在一起,对于长记录字段,可以通过调用函数SQLGetData直接取回数据。绑定字段可以根据自己的需要全部绑定,也可以绑定其中的某几个字段。通过调用函数SQLBindCol将变量地址值赋为NULL,可以结束对一个记录字段的绑定,通过调用函数SQLFreeStmt,将其中选项设为SQL_UNBIND,或者直接释放句柄,都会结束所有记录字段的绑定。B、SQLFetch:该函数用于将记录集的下一行变成当前行,并把所有捆绑过的数据字段的数据拷贝到相应的缓冲区。C、&光标:应用程序获取数据是通过光标(Cursor)来实现的,在ODBC中,主要有3种类型的光标:单向光标、可滚动光标和块光标。有些应用程序不支持可滚动光标和块光标,ODBC&SDK提供了一个光标库(ODBCCR32.DLL),在应用程序中可通过设置连接属性(SQL_STTR_ODBC_CURSOR)激活光标库。6、&&记录的添加、删除和更新:数据源数据更新可通过3种方式:通过SQLExecDirect函数使用相应的SQL语句;调用SQLSetPos函数实现记录集定义更新;调用SQLBulkOperations函数实现数据更新。第一种方式适用于任何ODBC数据源,后两种方式有的数据源不支持,可调用SQLGetInfo确定数据源。SQLBulkOperations:该函数操作基于当前行集,调用前,须先调用SQLFetch或SQLFetchScroll获取。函数调用后,块光标的位置变为未定义状况,因此,应该先调用函数SQLFetchScroll设定光标位置。7、错误处理:每个ODBC&API函数都能产生一系列反映操作信息的诊断记录,可以用SQLGetDiagField函数获取诊断记录中特定的域,另外,可以使用SQLGetDiagRec获取诊断记录中一些常用的域。8、事务处理:事务提交有两种方式:自动提交模式和手动提交模式。应用程序可通过调用函数SQLSetConnectAttr设定连接属性SQL_ATTR_AUTOCOMMIT,自动提交模
[2]基于MS SQLServer的全表搜索
&&&&来源:&
& 发布时间:&
最近在做项目的时候遇到一个问题,就是在查找记录的时候输入关键字找出满足条件的记录。一开始是每一个字段一个关键字,后面感觉有的查找的时候会涉及到6个甚至更多的字段,感觉在查找的时候相当困难。网上找了很久,想找到一种能够不需要指定字段就可以全表搜索的方法,可惜一直没找到,最后找到一个折中的办法:在每一个表中定义一个字段,这个字段存储其他所有字段的和,然后查找的时候就只要匹配这个字段就行了。下面是实现思路:因为在每条数据插入和修改的时候需要往这个字段中插入值或者是更新这个字段,而如果靠代码来控制的话会非常麻烦:你必须时时刻刻记得在哪里插入数据了,又在哪里修改了数据。最后想到了触发器,直接在数据库中建立一个触发器。触发器语句如下:Create trigger [GECOAssets_Trigger]on [dbo].[GECOAssets] for insert,updateasUpdate GECOAssets SetSumText=isnull(SourceID,'') +'&'+isnull(SourceName,'')+'&'+isnull(StateNow,'')+'&'+isnull(BuyDepartment,'')+'&'+isnull(Factory,'')+'&'+isnull(SourceType,'')+'&'+isnull(BackInfo,'')这样原本以为已经大功告成了,最后测试的时候发现,只要插入一条数据,或者表中的某个字段的值发生改变,所有的SumText的值都会被重新更新或者插入,当数据量很大的时候或者数据更新插入很频繁的时候,势必给数据库造成很大的压力。这时我突然想起了当初学Orace的时候老师讲过的行级触发器,于是百度、谷歌找了很久,最后得出的结论是:MS SQLServer不支持行级触发器。这下让我很受打击啊,毕竟自己觉得还不错的方法就这样被终结了,心情极度郁闷。不过,不抛弃不放弃是我的座右铭,于是死磕继续百度、谷歌,最后发现,在插入和更新数据的时候,会有一个表叫做inserted,而这个表会存储你更新时候的数据,这样,我灵光一闪:那这个表中肯定就会存储这条记录的ID值,只要能取到ID的值,想必就可以指定更新某一条记录了,也就可以实现行级触发器的效果了,我抱着试试看的心态把触发器改成了如下:Alter trigger [GECOAssets_Trigger]on [dbo].[GECOAssets] for&insert,updateasUpdate GECOAssets SetSumText=isnull(SourceID,'') +'&'+isnull(SourceName,'')+'&'+isnull(StateNow,'')+'&'+isnull(BuyDepartment,'')+'&'+isnull(Factory,'')+'&'+isnull(SourceType,'')+'&'+isnull(BackInfo,'')&where ID in (select ID from inserted)&果不其然,完美地实现了行级触发器的效果,至此就可以全表不指定字段(当然还是需要指定SumText字段的)搜索了,感觉虽然不是什么完美的解决方案,但是毕竟还是比较理想的实现了想要的效果。不知道各位有没有更好的解决办法,或者说有没有第三方的组件来实现全表关键字搜索或者更牛的多表联合关键字搜索呢?如果有的话,各位不要吝啬哦,小弟这厢有礼了...本文链接
[3]SQLSERVER 在局域网使用Windows身份验证连接局域网内的另一台SQL服务器(不是域环境)
&&&&来源:&
& 发布时间:&
SQLSERVER 在局域网使用Windows身份验证连接局域网内的另一台SQL服务器(不是域环境)之前连MSDN都说连接局域网内的另一台SQL服务器如果要用Windows身份验证的话必须是&域环境&但是今天我发现使用Windows身份验证不用域环境照样可以连接局域网内的另一台SQL服务器在MSDN上的解释:地址:/zh-cn/library/ms144284.aspx& & & & /zh-cn/library/ms143705(v=SQL.90).aspx&允许 SQL Server 支持具有混合操作系统的环境,在这种环境中并不是所有用户均由 Windows 域进行验证&&实际上是msdn论坛上的一个帖子中某人尝试了之后发现的我说一下步骤:我的试验环境:A机器:Windows7 SQL2005 &计算机名: joe &B机器:Windows8 SQL2008R2 & 计算机名:joehomepc&条件:A机器的 Windows帐户名跟B机器的Windows帐户名要一样 ,密码也要一样(可以没有密码)&第一步:比如我的A机器的Windows帐户是&Administrator而我的B机器的Windows帐户也是Administrator&两个帐户的密码都为空&A机器ip:192.168.1.100B机器ip:192.168.1.102&第二步:在A机器上打开SSMS,然后输入B机器的ip地址,使用Windows身份验证&直接连接到SQL2008R2第三步:查询SQL2008R2上的数据,如果在对象资源管理器里-》打开表会报错&但是使用查询编辑器就不会报错&&估计是因为SQL2008已经不支持SQL2005的&打开表&这个命令了&&总结:究竟是微软的漏洞呢?还是我们不知道有这个功能?&&本文链接
最新技术文章:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,E-mail:www_169it_(请将#改为@)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(5289)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_080068',
blogTitle:'C++连接SQL数据库分步骤进行',
blogAbstract:'C++连接SQL数据库第一步 系统配置
1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码。
2.需要在ODBC中进行数据源配置,数据源选\\”SQL SERVER”,登录方式使用“使用输入用户登录ID和密码的SQL SERVER验证”,并填写登录名(sa)和密码,注意一点,密码不能为空,这就意味着你的sa用户必须得有密码。否则无法通过系统本身的安全策略。测试通过就完成了配置。
C++连接SQL数据库第二步 C++与SQL连接初始化
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:1,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}当SqlServer数据量很大时,如何优化表格能加快处理速度
我的图书馆
当SqlServer数据量很大时,如何优化表格能加快处理速度
表设计和查询的一些参考
1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下: ●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。 ●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。 ●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。 ●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。 ●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。
2.避免或简化排序 应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素: ●索引中不包括一个或几个待排序的列; ●group by或order by子句中列的次序与索引的次序不一样; ●排序的列来自不同的表。 为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。
3.消除对大型表行数据的顺序存取 在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。 还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。下面的查询将强迫对orders表执行顺序操作: SELECT * FROM orders WHERE (customer_num=104 AND order_num&1001) OR order_num=1008 虽然在customer_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句: SELECT * FROM orders WHERE customer_num=104 AND order_num&1001 UNION SELECT * FROM orders WHERE order_num=1008 这样就能利用索引路径处理查询。
4.避免相关子查询 一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。
5.避免困难的正规表达式 MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _” 即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode &“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。 另外,还要避免非开始的子串。例如语句:SELECT * FROM customer WHERE zipcode[2,3] &“80”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。
6.使用临时表加速查询 把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。例如: SELECT cust.name,rcvbles.balance,……other columns FROM cust,rcvbles WHERE cust.customer_id = rcvlbes.customer_id AND rcvblls.balance&0 AND cust.postcode&“98000” ORDER BY cust.name 如果这个查询要被执行多次而不止一次,可以把所有未付款的客户找出来放在一个临时文件中,并按客户的名字进行排序: SELECT cust.name,rcvbles.balance,……other columns FROM cust,rcvbles WHERE cust.customer_id = rcvlbes.customer_id AND rcvblls.balance&0 ORDER BY cust.name INTO TEMP cust_with_balance 然后以下面的方式在临时表中查询: SELECT * FROM cust_with_balance WHERE postcode&“98000” 临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘I/O,所以查询工作量可以得到大幅减少。 注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。
7.用排序来取代非顺序存取 非顺序磁盘存取是最慢的操作,表现在磁盘存取臂的来回移动。SQL语句隐藏了这一情况,使得我们在写应用程序时很容易写出要求存取大量非顺序页的查询。 有些时候,用数据库的排序能力来替代非顺序的存取能改进查询。--------------------------------1。表里面存在多个类型的数据,是把表拆开,每个类型一张表,还是就放在一个表里,拆开以后可以分流数据量,但是会导致查询和统计的处理困难。答:对于含有图象数据类型的表还是另设一张表专门用来存储图象比较好.对于图象表:a:用这张表可以专门用来存储图片.b:如果把图象字段放在大表里,那么会给管理和编程带来很大的麻烦,如果图象被存储在大表中,一旦由于图象出现某些错误,那么将会影响整张数据表,那是很危险和很不明智的。c:这样也方便以后对各个表的维护。(有的表只维护文本数据,有的表只维护图象数据)
2。数据库在维护这样大数据量的单表时需要注意什么?(暂时不考虑什么数据库)答:利用磁盘的条带化,将你的整张大表放在多个物理磁盘上,可以充分的利用计算机的并行操作来提高系统的性能.(利用RAID5可以实现,还有很好的容错功能).要创建好对于你的查寻有利的索引,对于经常更新的表创建索引时要慎重考虑.太多的索引会影响数据库的更新性能.在创建索引时必须设置好填充因子,这样可以避免在对数据表更新时对表中数据页的拆分,减少对系统资源的耗费.将你的数据库设置成自动创建统计信息和自动更新统计信息,让优化器有最新的统计可以利用来提高系统的查询性能.如果表太大要定期的对表进行维护和检查(包括物理上和逻辑上的).及时做好对数据的备份.
3。如果要建一个表保存历史数据,那么历史数据表和当前的数据表应该怎么组织,才能最好的实现数据的一致和便于查询统计?(现在考虑只在这个单表里面保存大概两个月的数据)现在只是初步有了这几个考虑,以前设计数据库的时候也没有考虑那么多,希望能够借鉴一下大家的经验!答:保存历史数据的表结构最好和当前的表结构一致,才能最好的实现数据的一致和便于查询统计,对于历史记录可以设置成只读的,可以尽量多的创建对你的查询有意义的索引.在你大批量的将数据从当前表导入到历史表中时,可以先将索引删除,完成导入以后再重建.在导入前可以将数据库的恢复模型改为大容量型的,可以提高系统的导入速度,不过他的安全性会降低.如果你的内存足够大,那么可以将你的经常用于查询的热表锁定在高速缓存当中,这样可以避免IO操作,减小瓶颈.大大的提高系统的查询性能.注意:对于where column='%条件%'这样的查询条件,优化器是利用不上索引的,对于这样的模糊查询最好应用全文索引.
TA的最新馆藏[转]&
喜欢该文的人也喜欢

我要回帖

更多关于 sqlserver 复制数据库 的文章

 

随机推荐