这是一个典型问题,在网上搜一下就行了。给你搜了一个粘过来看看
1.索引优化
建索引的选择必须结合SQL查询、修改、删除语句的需要,一般的说法是在WHERE里经常出现的字段建索引。如果在WHERE经常是几个字段一起出现而且是用AND连接的,那就应该建这几个字段一起的联合索引,而且次序也需要考虑,一般是最常出现的放前面,重复率低的放前面。
SQL Server提供了一种简化并自动维护数据库的工具。这个称之为数据库维护计划向导(Database Maintenance Plan Wizard ,DMPW)的工具也包括了对索引的优化。如果你运行这个向导,你会看到关于数据库中关于索引的统计量,这些统计量作为日志工作并定时更新,这样就减轻了手工重建索引或者DBCC INDEXDEFRAG所带来的工作量。如果你不想自动定期刷新索引统计量,你还可以在DMPW中选择重新组织数据和数据页,这将停止旧有索引并按特定的填充因子重建索引。
2.
改善硬件(双CPU,Raid 5,增加内存)
tempdb这个临时数据库,它对性能的影响较大。tempdb和其他数据库一样可以增大,可以缩小。当数据文件需要增长的时候,通常不能保持剩余部分的连续性。这时文件就会产生碎片,这种碎片会造成性能下降。这种碎片属于外来性碎片。要阻止在tempdb中产生外来性碎片,必须保证有足够的硬盘空间。一般将tempdb的容量放到平均使用容量。而你也应该允许tempdb自动增长,比如你有个一个超大的join操作,它建立了一个超过tempdb容量的时候,该查询将失败。你还要设置一个合理的单位增长量。因为如果你设得太小,将会产生许多外来性碎片,反而会占用更多资源。sqlserver调优最有效的做法之一,就是把争夺资源的操作独立出去。tempdb就是一个需要独立出去的部分而tempdb和其他系统库一样是公用的,是存取最可能频繁的库,所有处理临时表、子查询、GROUP BY、排序、DISTINCT、连接等等。它最适合放到一个具有快速读写能力的设备上。比如RAID0卷或RAID0+1卷上。
查询语句一定要使用存储过程;
3、查询尽量使用TOP子句
4.将表按一定的约束分成子表,(如按分类)创建约束,在用Like 时,先用分类 and like , 应该可能解决问题. 而且效果立秆见影!(你要确定SQL会认识你建的分区视图).我一个表有上百万的记录(700兆),用分区视图后,查询速度基本跟10万行一样.
如果还是太慢,还可以考滤分布式分区视图!这总可以解决问题了吧!
关键在于你能否把大表按某种约束分解成子表.
B. SQL连表查询跟一个个表查询那个快各有什么优点和缺点
SQL链接表查询称为联合查询,表查询是单个查询。其区别和优点如下:
1.从发展效率的角度看:
联合查询是需要多个单查询逻辑组合才能完成的查询工作,联合查询只需要一个SQL就可以完成查询工作,即将业务逻辑转化为SQL,由数据库来处理,相对来说,开发效率会更高。
2.从查询效率来看:
单个查询具有更好的可重用性,因此比联合查询更有效。
当读取或写入数据库时,数据库使用锁机制来限制其他连接对其进行操作。由于联邦查询比单个查询慢得多,它们会增加锁争用,因此单个查询更好。
3.从逻辑结构层面来看,分层原则
关联表示业务规则/逻辑。如果经常使用关联查询,就会将大量的业务规则和逻辑放入数据库中执行,这将大大增加CPU、内存、IO等资源的消耗。
4.从资源利用的角度来看
在大多数情况下,并不是所有相关查询的结果都得到了有效的使用。例如,后台管理的列表界面会显示分页、关联查询的结果集,只使用当前页面的数据,而数据库需要消耗额外的资源才能得到整个结果集。
5.从架构的可伸缩性的角度来看
大量的相关查询将导致集中式数据库体系结构难以转化为分布式体系结构,可扩展性优化也难以实现。关联查询方便快捷,开发效率更高。
不使用关系查询在体系结构级别上有很多优势,但是它需要大量的系统分析、设计和开发功能。一般在互联网行业,如用户数量最好重视这方面。
由于数据量小,两个查询的效率基本没有差别,但在实际应用中,需要根据数据量、业务复杂度等进行综合评价。
C. sql数据查询速度过慢的原因多个表连接会导致过慢吗怎么优化
数据库索引的优势就是针对多表查询时,能更快速的查出结果,建议你使用索引来做
D. SQLSERVER2005数据库,使用select语句在列名中嵌套查询其他表速度非常慢是什么原因呢
A表的column1和B表的columna字段是否有加索引?没有都话,先把索引加上
因为A表数据量远大于B表,那么A表中肯定存在大量数据是在B表中无关联的,这些无关联的数据需要查询吗?如果不需要,那么直接用inner join下岂不美哉
E. sql语句多表联查,查询速度太慢,超过10s,由于是菜鸟,不知道怎样优化
确定是菜鸟,sql 写成这样 证明你逻辑很清楚啊,建议如果是初学者,代码规范一定要保持
不知道代码规范,可以去窗口format一下。。。
言归正传 你这个优化的话 可以把
AND p.mediatypeinfoid in (
select
id
from
fn_get_mediatype_infor(5)
)
上面这部分 换成 inner join
F. 如何提高sql数据库的查询速度
一、程序中:
1、保证在实现功能的基础上,尽量减少对数据库的访问次数。
2、通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担,能够分开的操作尽量分袭蔽开处理,提高每次的响应速度。
3、在数据窗口使用SQL时,尽量把使用的索引放在选择的首列,算法的结构尽量简单。
二、避免使用不兼容的数据类型。
例如“float”、“int”、“char”等,都属于不兼容。 数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操型态作。
三、尽量避免在Where子句中对字段进行函数或表达式卜禅源操作,这将导致引擎放弃使用索引而进行全表扫描。
四、尽量使用数字型字段。
一部分开发人员和数据库管理人员喜欢把包含数值信息的字段设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
G. SQL2000数据库,如何提高对一个庞大的表的查询速度
你经常查询的,经常分组的,经常判断的
字段
,必须加
索引
,增加索引后,查询速度会大幅度提高,但是插入,更新,删除速度会变慢,总而言之,总有一个慢,你权衡是数据插入,更新,删除多还是查询多,决定是否增加索引,非经常查询字段就不要增加索引了,以免浪费
数据空间
和增加插入,更新,删除的时间
另外,如果数据按时间增长,由于你使用的是SQL2000,建议将
大表
拆开每日保存一张
日表
,缩小单张表的大小,在表内查询就会快很多(因为读进
内存
的数据小多了),实现分区的功能;如果使用SQL2005,则数据库可以直接支持分区
这样就
没有问题
了,我们这处理的数据每天4000
万行
,保存了50天数据,查询起来也只要5分钟