SqlServer数据库优化之索引、临时表

问题:工作是查询一张500万多条数据的表时,查询总是很慢,于是进行优化。

--查询表所有索引

  use RYTreasureDB

  EXEC Sp_helpindex [RecordDrawScore]


--
这张表没有主键,也没有索引 SELECT * FROM RecordDrawScore WHERE UserID IN (1,2,3,4,5);

1.添加索引

添加索引后,SELECT时不会对整个表一行一行去遍历,只对UserID字段进行筛选。

CREATE INDEX RecordDrawScore_userID ON [RecordDrawScore](UserID);

由于我需要对表进行多次查询,所以第二步建临时表,减少对数据表的操作。

2.建立临时表

--添加(NOLOCK) 后查询表不会锁表
SELECT userid INTO #Temp FROM [RecordDrawScore](NOLOCK) re 
--给临时表添加索引
CREATE INDEX Temp_userID ON #Temp(UserID);
--当临时表用完后要删除它,删除表和UserID都会同时删除索引
IF object_id('tempdb..#ScoreTemp') is not null 
BEGIN DROP TABLE #ScoreTemp; END

添加完后,效率提升了很多。

合理的建立索引会大大提高效率,反正也会大大降低效率。

转载请标明出处,谢谢!

原文地址:https://www.cnblogs.com/nnnnnn/p/10948205.html