第二,检查SQL表中的记录是否过多
第三,整理一下服务器硬盘的碎片
第四,更新硬件~加大内存,增加系统缓存
注意做好数据库系统优化
1时候在使用Access文件的时候,随着增删改的不断的连续,会导致文件越来越大。即使手动删除或者使用delete语句删除了大量的数据记录,会发现文件的大小依然没有减掉,而且随着你再往里写数据,又会增大。
2产生这个现象的原因跟Access本身的机制有关,具体也不清楚,好像是有什么历史记录还是什么存储碎片。ACCESS数据库在进行删除 *** 作后,并不从该数据库中把数据清除掉,而是删除其索引相关的东西,虽然显示不出来,但是那些东西还是在文件中存在的,所以会引起ACCESS数据库文件越来越大。即使是我们不通过代码来访问access文件,而只是通过用户界面访问,随着文件的增大,也会带来一系列的问题。其症状包括:对象可能打开得更慢,查询可能比正常情况下运行的时间更长,各种典型 *** 作通常似乎也需要使用更长时间。更何况如果在网站应用中,采用的是Access作为数据库的话,这里就有了性能上的问题。文件越来越大,会影响查询的速度,而且ACCESS是采用独占方式工作的,也就是说一次只能一个进程打开这个数据库执行 *** 作,如果是多个用户的话就要"排队"了,所以ACCESS数据库如果变为很大的话,执行一个查询时间就会变长,而进程"排队"的等待时间也就会变得很久,专业型的数据库就不同,可以同时接收多个并发的访问,可以采用SQL数据库或其它大型并发数很强的数据库。
3但是很多时候我们是需要Access文件,往不同的地方拷贝的,比如说,一个Server上生成了一个Access文件,需要拷贝到另外的Server上,而且Server间如果网速不是很好的话,会需要很长的时间来传输这个文件。所以这时候我们希望这个文件在内容不变的前提下,越小越好。所以我们可以去除这个Access的冗余信息。
4Office Access本身就有这种功能,我们可以通过菜单找到这个工具,然后单击这个图标手动压缩。
5执行以下这几句代码就可以了。
首先引用C:\Program Files\Common Files\System\ado\msadoxdll,该DLL包含ADOX命名空间;
接着引用C:\Program Files\Common Files\System\ado\msjrodll,该DLL包含JRO命名空间
注意:如,导入dll不成功,手动把com组件 导入为 net组件,在用vsnet工具导入
///压缩修复ACCESS数据库,mdbPath为数据库绝对路径
public void Compact(string mdbPath)
{
if (!FileExists(mdbPath)) //检查数据库是否已存在
{
throw new Exception("目标数据库不存在,无法压缩");
}
//声明临时数据库的名称
string temp = DateTimeNowYearToString();
temp += DateTimeNowMonthToString();
temp += DateTimeNowDayToString();
temp += DateTimeNowHourToString();
temp += DateTimeNowMinuteToString();
temp += DateTimeNowSecondToString() + "bak";
temp = mdbPathSubstring(0, mdbPathLastIndexOf("\\") + 1) + temp;
//定义临时数据库的连接字符串
string temp2 = "Provider=MicrosoftJetOLEDB40;Data Source=" + temp;
//定义目标数据库的连接字符串
string mdbPath2 = "Provider=MicrosoftJetOLEDB40;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=l1epc2";
//创建一个JetEngineClass对象的实例
JetEngineClass jt = new JetEngineClass();
//使用JetEngineClass对象的CompactDatabase方法压缩修复数据库
jtCompactDatabase(mdbPath2, temp2);
//拷贝临时数据库到目标数据库(覆盖)
FileCopy(temp, mdbPath, true);
//最后删除临时数据库
FileDelete(temp);
}
数据库的结构很重要,表的建立,对需要用到的字段进行建立索引:尽量单表查询。
CREATE INDEX index_name ON table_name (column_name);
多字段查询,建立索引:
CREATE INDEX index_name ON table_name (column_name1,column_name2);
唯一索引:
CREATE UNIQUE INDEX index_name ON table_name (column_name);
1、是这样的。
2、这个说不好,我没这么做过。你手边应该有oralce的全套电子文档吧。关键是你要找对系统表或者视图。我记得索引的系统视图不是这个。
3、这些与你要做的有关系吗?别像没头苍蝇一样瞎撞了。
4、不用删表,如果你连基本的语句命令都不懂,那只能看书了。
5、慢的原因有好多,逐步排除吧,等找到真正原因再说。急没用的。
6、默认情况下,是会建到用户的默认表空间的。
7、这个看你的维护需要。最起码先弄明白你的库是怎么回事再说吧。就从这些问题看,你根本就是门外汉,连库是怎么回事都没弄明白。
数据量比较大的访问速度慢问题,就目前来说,我遇到的解决方法有一些,首先尽量不使用select ,因为数据库在进行查询时会把对应的列进行解析,会使得数据库的访问速度变慢,查询时应该选择需要的列;另外在查询时需要在关键列上建立索引,索引是提高访问数据库速度的最重要的手段,一般访问速度慢的问题中,90%可以使用建立索引来解决,具体怎么建立索引还请楼主自己查看相关资料;再一个就是及时对表进行数据分析,分析过的表能够自己选择合适的索引,使得查询性能在一定程度上得到提高(但是数据库自己选择的执行路径也不一定都是正确的,这一点需要具体问题具体分析)。
SQL Server查询速度慢的原因有很多,常见的有以下几种:
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不足
5、网络速度慢
6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源
以上就是关于为什么我的SQL数据库变的很慢全部的内容,包括:为什么我的SQL数据库变的很慢、怎么解决ACCESS数据库太大造成运行慢的问题、如何解决SQL Server数据库查询速度慢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)