没重装系统前:环境:windows server 2003(32)+IIS6.0+.net4.0+sql2005;网站使用一切正常。
重装系统后:环境1:windows server 2003(64)+IIS6.0+.net4.0+sql2005;网站使用很卡。
环境2:windows server 2003(64)+IIS6.0+.net4.0+sql2008(32);网站使用很卡。
使用查询分析器直接执行sql语句,单表查询很快,夺标查询就很慢,数据库什么的都是以前的。后来再某张表加了索引,速度恢复。但我的库有几百张表,我不可能每张都去加索引啊。
怀疑问题:32位的数据库在64位的系统上访问慢。
请大侠帮忙看看,分不多,先拜谢!!
sql serverwindows serverasp.net操作系统
重装系统后:环境1:windows server 2003(64)+IIS6.0+.net4.0+sql2005;网站使用很卡。
环境2:windows server 2003(64)+IIS6.0+.net4.0+sql2008(32);网站使用很卡。
使用查询分析器直接执行sql语句,单表查询很快,夺标查询就很慢,数据库什么的都是以前的。后来再某张表加了索引,速度恢复。但我的库有几百张表,我不可能每张都去加索引啊。
怀疑问题:32位的数据库在64位的系统上访问慢。
请大侠帮忙看看,分不多,先拜谢!!
sql serverwindows serverasp.net操作系统
ROUND(s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks
+ s.user_scans ),
0) AS [Total Cost] ,
s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks
+ s.user_scans ) AS Improvement_Measure ,
DB_NAME() AS DatabaseName ,
d.[statement] AS [Table Name] ,
equality_columns ,
inequality_columns ,
included_columns
FROM sys.dm_db_missing_index_groups g
INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle
INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle
WHERE s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks
+ s.user_scans ) > 10
ORDER BY [Total Cost] DESC ,
s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks
+ s.user_scans ) DESC
--如果user_seeks为0,user_updates很多,而说明建了索引没什么用
select
DB_NAME(d.database_id),
OBJECT_NAME(d.object_id),
i.name,
user_seeks, --查找次数
user_scans, --扫描次数
user_lookups, --书签查找次数
user_updates --通过用户查询执行的更新次数
from sys.dm_db_index_usage_stats d
inner join sys.indexes i
on d.object_id = i.object_id
and d.index_id = i.index_id
where database_id = DB_ID('数据库名称')
非常感谢,现在问题解决了,是某一张表的索引失效,表中有5W条数据,在程序中有多处引用该表。有个疑问,为什么索引会失效了,我重建了n次都不行,有什么地方被我忽略了吗?请指导,,哦 ,你说的索引失效其实就是,这个索引没有用到,比如你写了一个sql语句,那么你又建了一个索引,你认为这个语句能用上这个索引,但实际上从执行计划上看,这个sql语句,根本没有走这个索引,所以这个索引就是无效的索引。无效的索引不是说,你通过重建,就能生效,而是说,你建的这个索引,sql server认为没必要用,因为sql server认为用了你的索引,sql执行起来,反而会更慢。所以,你必须按照语句的实际情况,来建索引。比如,你的sql语句是这样的:select xxx,yyy from tb where cast(a as int) > 5那么你建了如下索引:create index idx_tb_a on tb(a)那么,你会发现,在执行语句是,sql server不会用这个idx_tb_a索引,因为你在where子句中,用了函数,这样cast(a as int) ,就会导致索引用不到。还有像 where a like '%www%'
也会导致用不上索引