SQL速度慢的解决方法

  下面是我多年经验的总结:

  网络编程总要和数据库打交道。和数据库打交道总要接触到SQL。如何使你的SQL 跑得快一点,本文介绍几种行之有效的方法:

  方法一、尽量使用复杂的SQL来代替简单的一堆SQL. 同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率。有多个查询时,要善于使用JOIN。

  oRs=objDBC.Execute(‘SELECT * FROM Books‘) for(; !oRs.Eof; oRs.MoveNext()) { oRs2=objDBC.Execute(‘SELECT * FROM Authors WHERE AuthorID=‘‘+oRs (‘AuthorID‘).value+‘‘‘); Response.write(oRs(‘Title‘).value+‘ ‘+oRs2(‘Name‘)+‘
‘); } 要比下面的代码慢: oRs=objDBC.Execute(‘SELECT Books.Title,Authors.Name FROM Books JOIN Authors ON Authors.AuthorID=Books.AuthorID‘); for(; !oRs.Eof; oRs.MoveNext()) { Response.write(oRs(‘Title‘).value+‘ ‘+oRs(‘Name‘)+‘
‘); }

  方法二、尽量避免使用可更新Recordset oRs=objDBC.Execute(‘SELECT * FROM Authors WHERE AuthorID=17‘,(some flags)); oRs(‘Name‘)=‘Karl Karlsson‘; oRs.Update();

  要比下面的代码慢: objDBC.Execute(‘UPDATE Authors SET Name=‘Karl Karlsson‘ WHERE AuthorID=17‘);

  方法三、更新数据库时,尽量采用批处理更新将所有的SQL组成一个大的批处理SQL,并一次运行;这比一个一个地更新数据要有效率得多。这样也更加满足你进行事务处理的需要:

  (in JScript) strSQL=‘‘; strSQL+=‘SET XACT_ABORT ON ‘; strSQL+=‘BEGIN TRANSACTION ‘; strSQL+=‘INSERT INTO Orders(OrdID,CustID,OrdDat) VALUES(‘9999‘, ‘1234‘,GETDATE()) ‘; strSQL+=‘INSERT INTO OrderRows(OrdID,OrdRow,Item,Qty) VALUES(‘9999 ‘,‘01‘,‘G4385‘,5) ‘; strSQL+=‘INSERT INTO OrderRows(OrdID,OrdRow,Item,Qty) VALUES(‘9999 ‘,‘02‘,‘G4726‘,1) ‘; strSQL+=‘COMMIT TRANSACTION ‘; strSQL+=‘SET XACT_ABORT OFF ‘; objDBC.Execute(strSQL);

  其中,SET XACT_ABORT OFF 语句告诉SQL Server,如果下面的事务处理过程中,如果遇到错误,就取消已经完成的事务。

  方法四、数据库索引

  方法五、避免使Text字段太大当字符串的值大小不固定时,用varchar比用char的效果要好些。我曾经看到一个例子程序,字段被定义为TEXT(255),但是他的取值经常只有20个字符。这个数据表有50k个记录,从而使这个数据库很大,大的数据库必然较慢。

时间: 2025-01-21 19:20:37

SQL速度慢的解决方法的相关文章

用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接 的解决方法

用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接 的解决方法如下: 一.控制面板->服务->MS SQL SERVER->登陆-->本地系统帐户-->重新启动MS SQL SERVER用windows验证登陆查询分析器-->执行 sp_password null,sa新密码,'sa' 二."无法连接到服务器,用户xxx登陆失败"该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方

Sql Server2000孤立用户解决方法

server|解决 Sql Server2000孤立用户解决方法关键词: 孤立用户                                          把数据库备份还原到另一个服务器时,可能会遇到孤立用户的问题.下面列出了MS的方法(来自帮助)和自己的方法方法一: 孤立用户疑难解答把数据库备份还原到另一个服务器时,可能会遇到孤立用户的问题.下面的方案显示并解决了这个问题: 通过执行 sp_addlogin,把登录 janetl 改名为 dbo. sp_addlogin 'janet

Win7系统搜索文件速度慢的解决方法

  平常我们会使用windows系统自带的搜索功能来搜索要查找的文件或资料,而win7系统文件搜索是基于索引的,一般是默认搜索库文件夹.开始菜单.电子邮件等等文件,很多用户反映win7搜索文件速度很慢,这很是影响到我们的工作效率,其实我们是可以直接来对搜索项目和索引选项进行设置来提高搜索速度,一起来看看下面的设置教程吧. 1. 在"任务栏"空白处单击右键,在弹出菜单中选择"属性"打开"任务栏和'开始'菜单属性"窗口,点击"自定义&quo

Eclipse安装ADT插件速度慢的解决方法_Android

本文讲述了Eclipse安装ADT插件速度慢的解决方法.分享给大家供大家参考,具体如下: 在天朝很多事情就不可避免的蛋疼,download.eclipse.org 访问巨慢,导致 ADT 安装过程也巨慢,有事运气好会快一点,但大部分时候就跟shit一样再见 要跟上Google的大步伐必须的解决这个问题啊, 好在国内有志人士做了Eclipse的镜像站,我们只要把 download.eclipse.org 指向国内镜像站就OK 啦 2014-11-15 19:17:25 更新: download.a

MySQL导入sql脚本错误:2006 解决方法_Mysql

MySQL导入sql脚本错误:2006 - MySQL server has gone away 到如一些小脚本很少报错,但最近导入一个10+M的SQL脚本,却重复报错: Error occured at:2014-03-24 11:42:24 Line no.:85 Error Code: 2006 - MySQL server has gone away 最终找到原因,原来是MySQL导入大批量数据的时候超出了默认允许最大的数据包所以就提示2006 - MySQL server has go

64位win7下pl/sql无法连接oracle解决方法_oracle

1.pl/sql无法连接本机的oracle(ORA 12154:TNS:无法解析指定的连接标识符) 解决方法:pl/sql不能安装在Program Files(x86)文件夹下,要安装在Program Files文件夹下 2.pl/sql无法连接远程oracle(ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务) 解决方法:①在linux下找到oracle目录下的listener.ora,用vi编辑②下面红色为添加部分,其中GLOBAL_DBNAME要与客户机配置的or

连接MySql速度慢的解决方法(skip-name-resolve)_Mysql

最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢. 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve. 原因是默认安装的MySql开启了DNS的反向解析.如果禁用的话就不能在MySQL的授权表中使用主机名了而只能用ip格式. 附:How MySQL uses DNS When a new thread connects to mysqld, mysqld will spawn a new thread t

SQL SERVER 9003错误解决方法_MsSql

SQLSERVER 9003错误解决方法 只适用于SQL2000 (只适用于SQL2000) "无法打开新数据库 'POS'.CREATE DATABASE 中止. (Microsoft SQL Server,错误: 9003)" 看是9003错误,就想到可能是由于日志文件的原因,再看数据库文件可能损坏,于是想到dbcc checkdb指令. 方法如下: 1.我们使用默认方式建立一个供恢复使用的数据库(如pos).可以在SQL   Server   Enterprise   Manag

sql server数据库连接出错解决方法

sql server数据库教程连接出错解决方法 错误提供 "由于检索用户的本地应用程序数据路径时出错,导致无法生成 sql server 的用户实例.请确保该用户在此计算机上有本地用户配置文件.该连接将关闭. " 字符串问题 data source=".sqlexpress;attachdbfilename=|datadirectory|test.mdf;integrated security=true;user instance=false" net项目默认的数据