Sql Server数据库优化的一些高级方法2
1,查询没有使用参数化的语句,参数化很重要也很简单
1)脚本每次进入数据库执行,只编译一次。能提高性能
2)众所周知的简单
SELECT TOP 10
MAX(Text) '示例语句' ,
SUM(CAST(size_in_bytes AS BIGINT)) / 1024. / 1024. AS '占用服务器内存Size(MB)' ,
COUNT(1) '缓存计划数'
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
--cross apply sys.dm_exec_text_query_plan(plan_handle,default,default)
WHERE Objtype IN ( 'Adhoc', 'Prepared' )
AND text NOT LIKE '(@%'
AND text NOT LIKE '%sys%'
GROUP BY LEFT(TEXT, 20)
HAVING COUNT(1) > 10
ORDER BY '缓存计划数' DESC
2,查看数据库脚本的cpu和磁盘统计
SET statistics time on
SET statistics io on
只在当前查询页起作用,关掉当前查询tab即关掉了
3,显示估计执行计划,根据建议可直接建立缺省索引
4,根据前一篇文章(摸这里)可查询到频繁查询而需要建立的索引。好的索引可以极大提高性能。
建立索引的原则:
1)能极大减少数据量的字段放在前面;
2)第一个字段的不同决定要建立几个索引(下图一般需要三个)
3)索引需要的字段一般以最多的为准,被用到最多的放在前面
5,附件中为产生需要重建的索引的脚本的存储过程的生成脚本(附件摸这里)
其中sql server 2012商务智能版本不支持脚本中的WITH(ONLINE=ON),可根据具体情况将其去掉。
定期执行该存储过程,清理重新生成索引,清理索引碎片。
6,创建索引的最简单语句
Create index IX_t_CustVCard_YGCode
on [t_CustVCard]([YGCode])
include([CustUniqCode])
7,SqlServer的一些基本辅助函数:
sp_helpindex 标明 -------------------查询这个表有多少个索引
8,备份数据库策略:(附件摸这里)
举个例子:一周做一个完整备份,一个小时做一次日志备份,还原的时候依次还原即可。脚本见附件。