怎样才能减少MS SQL数据库查询的系统开销、提高查询速度?(300分)

  • 主题发起人 主题发起人 胡西
  • 开始时间 开始时间

胡西

Unregistered / Unconfirmed
GUEST, unregistred user!
查询时我要频繁打开存放查询条件的表,然后依次读取表中的查询条件在存放数据的表中
进行查询,怎样才能提高速度?
SQL查询完成后怎样释放占用的系统资源?Thank you!
 
用存贮过程
在存贮过程里面先找道查询条件,
再查询数据,客户端只调用存贮过程。
 
用存贮过程吧,存贮过程是事先编绎好的,运行速度非常快,如果你有非常复杂的查询,
最好在存贮过程中完成。
 
的确该用存储过程
 
存储过程可以减少服务器和数据库之间的交互流量,值得推荐。
另外存储过程的写法也很值得推敲。
数据量大的时候,索引也能大大提高速度和效率。

〉〉释放占用的系统资源?
尽快关闭连接。
 
建议不要频繁关闭打开连接,很浪费资源的
三层的话用连接池吧
 
用存储过程吧
存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工
作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称
存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调
用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、
输出参数、返回单个或多个结果集以及返回值。
存储过程可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
1.可以在单个存储过程中执行一系列 SQL 语句。
2.可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
3.存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。

 
请使用索引吧!
在很多查询中,索引可以带来多方面的好处。例如,索引除了可以覆盖查
询外,还使得可以进行范围查询。SQL Server 可以在同一个查询中为一个表
使用多个索引,并可以合并多个索引(使用联接算法),以便搜索关键字共同
覆盖一个查询。另外,SQL Server 会自动确定利用哪些索引进行查询,并且能
够在表被改动时确保该表的所有索引都得到维护。

设计索引方法:
当 MSSQL Server执行查询时,查询优化器会对可用的数据检索方法的成本
进行评估,从中选用最有效的方法。SQL Server 可以扫描表,如果索引存在则
使用索引。当 SQL Server 执行表扫描时,它从表的第一行开始逐行查找,将
符合查询条件的行提取出来。当 SQL Server 使用索引时,它会查找查询所需
的行的存储位置,并只提取出所需的行。

在考虑是否为一个列创建索引时,应考虑被索引的列是否以及如何用于查询中。
索引对下列查询很有帮助:
1.搜索符合特定搜索关键字值的行(精确匹配查询)。精确匹配比较是指查询使用
WHERE 语句指定具有给定值的列条目。例如:
WHERE emp_id = 'VPA30890F'
2.搜索其搜索关键字值为范围值的行(范围查询)。范围查询是指查询指定其值
介于两个值之间的任何条目。例如:
WHERE job_lvl BETWEEN 9 and 12

WHERE job_lvl >= 9 and job_lvl <= 12
3.在表 T1 中搜索根据联接谓词与表 T2 中的某个行匹配的行(索引嵌套循环联接)。
4.在不进行显式排序操作的情况下产生经排序的查询输出,尤其是经排序的动态
游标。
5.在不进行显式排序操作的情况下,按一种有序的顺序对行进行扫描,以允许基
于顺序的操作,如合并联接和流聚合。
6.以优于表扫描的性能对表中所有的行进行扫描,性能提高是由于减少了要扫描的
列集和数据总量(该查询有覆盖索引可供使用)。
7.插入和更新操作中重复的新搜索关键字值,以实施 PRIMARY KEY 和 UNIQUE
约束。
8.已定义了 FOREIGN KEY 约束的两个表之间匹配的行。
9. LIKE 比较进行查询时,如果模式以特定字符串如"abc%"开头,使用索引则
会提高效率;如果模式以通配符如"%xyz"开头,则索引不起作用。




 
优化SQL语句可以提高性能
1。避免写出扫描整个表的SQL语句
2。尽量避免使用 OR, OR运算不可避免地降低了查询的效率,一般IN运算要
比OR运算快得多
 
>>尽量避免使用 OR, OR运算不可避免地降低了查询的效率,一般IN运算要 比OR运算快得多
In运算怎么快,有依据吗?
in运算会扫描整个表,即使建了索引也一样。而对于有索引的字段的查询,or则可以利用
索引而提高检索效率。一家之见,欢迎讨论。
 
来晚了,别人都说完了.
别忘给分,几分也要,嘻嘻.
 
提高速度与释放占用的系统资源是一对矛盾
 
提问者请认真阅读大富翁论坛规则说明

http://www.delphibbs.com/delphibbs/rules.htm
 
还是那句话:使用存储过程
优点很多:速度快,占用资源小,易于维护
缺点:不易于移植
 
我有例 子你要不要!
 
用存储过程应该会好点的。
 
除了上面同志说的方法外,你还可以采用多线程后台处理,让用户感觉不到速度的影响过大:)
 
1.可以考虑将查询条件的表放在本地的内存中(如修改不频繁的话)
2.仔细构造你的SQL语句
3.使用异步存取方式。
4.仔细构造你的Create Table语句包括字段类型、索引等
5.用过程可以减少SQL语句的编译时间
 
TO:coolbalas
in运算会扫描整个表,即使建了索引也一样。而对于有索引的字段的查询,or则可以利用
索引而提高检索效率。這理論上好象是這樣﹐但我查了MS SQLServer查詢優化器的show plan﹐
發現查詢優化器已把in 改成or來執行了﹐而in、or子句常會使索引失效
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部