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

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

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

轉載請標明出處,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM