之前遇到过几次CRM实体表里的数据太大导致默认视图加载太慢(超过一分钟)或者直接报错SQL Server超时,排除网络和服务器问题后,基本确定是数据库sql查询超时导致,通过给数据库表加索引解决,这里记录下我的分析和解决过程。

  打开Account实体默认视图,一直加载不出数据,超过2分钟后,报超时错误。

  

视图太慢 可以建索引吗 视图很慢_加载

 

  用SQL Server Profiler工具跟踪超时的sql语句,找到一条Account的查询,执行时间刚好是2分钟,视图加载超时就是执行这条sql超时导致的了(CRM设定的sql执行默认超时时长是2分钟,这个值可以修改)。

  

视图太慢 可以建索引吗 视图很慢_sql语句_02

 

 

 

  把这条sql语句拿出来在SSMS上执行,时间也超过2分钟,接下来就分析是哪段语句导致查询时间过长了,随后发现sql语句中对结果进行ModifiedOn desc排序,拿掉这个排序,查询结果就秒出了,到这里就确认是缺少ModifiedOn字段的索引导致查询慢了。之所以sql语句会对结果通过ModifiedOn倒序排序,是因为客户表的默认视图配置了修改时间的降序排序。

  

视图太慢 可以建索引吗 视图很慢_sql语句_03

  打开Account表的索引,发现有一条ModifiedOn字段的asc索引,删掉这条索引,重建它的desc索引,应该就能解决了。

  删除并重建索引:

exec sp_helpindex [表名]

DROP INDEX [索引名] ON [表名],删除这条索引。

  3、打开表设计,界面右键选择索引/键,点击添加,指定列名和索引名,列的排序方式选降序。

  

视图太慢 可以建索引吗 视图很慢_字段_04

  

视图太慢 可以建索引吗 视图很慢_加载_05

 

  点击关闭,可以保存当前设计窗口来执行更改,如果执行报错超时,也可以在窗口右键-生成更改脚本,将脚本拷贝出在新的查询窗口中执行,这样就不会超时了。

  

视图太慢 可以建索引吗 视图很慢_sql语句_06

   

视图太慢 可以建索引吗 视图很慢_视图太慢 可以建索引吗_07

 

   等索引创建完成后,重新打开客户的默认视图,结果就秒出了。

   总结:如果CRM视图加载慢或SQL超时,先查看视图配置了哪些字段的默认排序,再到数据库表中看有没有这个字段的索引,没有的话就建一条索引(注意排序不要建反了),建好索引后,查询速度就会变快了,当然如果有些视图的排序是不必要的话,也可以去掉这个排序,这样就不用建索引了。