成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server數據庫隨機抽取數據效率優化總結篇

數據庫 SQL Server
本文主要介紹了提高SQL Server數據庫隨機抽取數據時的速度的方法,文中通過四個代碼示例來逐漸推薦作者的思路,從而使解決思路更加的清晰易懂,希望能對讀者有所幫助。

在操作SQL Server數據庫時如何快速的從數據表里隨機抽取數據呢?本文通過四個代碼示例來比較,逐步地總結經驗,來講述提高隨機抽取數據速度的方法,接下來我們就開始介紹。

假設我生成了一個簡單的數據表,并且導入了500W條數據進行測試。

下圖為***次采用的SQL語句:

  1. Declare @d Datetime  
  2.  
  3. Set @d=getdate()  
  4.  
  5. SELECT top 1[ActivityID]  
  6.  
  7. ,[CardNo]  
  8.  
  9. ,[Password]  
  10.  
  11. ,[State]  
  12.  
  13. ,[CreateTime]  
  14.  
  15. ,[GetTime]  
  16.  
  17. FROM [TGBus_Card].[dbo].[Ka_Card] Where ActivityID = 501 And State = 0 Order By NEWID()  
  18.  
  19. Select [語句執行花費時間(毫秒)]=Datediff(ms,@d,Getdate()) 

這是我優先會想到的解決方案,NEWID()每次都要檢索整個數據表,為每一行數據產生一個uniqueidentifier類型的***值,所以它的執行效率肯定不高 ,每次執行都要在4秒左右。

還有沒有更好的辦法那?!

我在想,因為SELECT是在ORDER BY之前執行的,所以能不能在SELECT的時候產生NEWID()后在ORDER BY使用那?

于是有了第二個版本:

  1. Declare @d Datetime  
  2.  
  3. Set @d=getdate()  
  4.  
  5. SELECT top 1[ActivityID]  
  6.  
  7. ,[CardNo]  
  8.  
  9. ,[Password]  
  10.  
  11. ,[State]  
  12.  
  13. ,[CreateTime]  
  14.  
  15. ,NEWID() as Random  
  16.  
  17. FROM [TGBus_Card].[dbo].[Ka_Card] Where ActivityID = 501 And State = 0 Order By Random  
  18.  
  19. Select [語句執行花費時間(毫秒)]=Datediff(ms,@d,Getdate()) 

確實有所提高!!但太不明顯了。。。。。

還有沒有更好的辦法?!

于是我又想到了2005的新特性TABLESAMPLE,馬上試試!

這是第三版的代碼:

  1. Declare @d Datetime  
  2.  
  3. Set @d=getdate()  
  4.  
  5. SELECT top 1[ActivityID]  
  6.  
  7. ,[CardNo]  
  8.  
  9. ,[Password]  
  10.  
  11. ,[State]  
  12.  
  13. ,[CreateTime]  
  14.  
  15. ,[GetTime]  
  16.  
  17. FROM [TGBus_Card].[dbo].[Ka_Card] tablesample (1000 Rows) Where ActivityID = 501 And State = 0 
  18.  
  19. Select [語句執行花費時間(毫秒)]=Datediff(ms,@d,Getdate()) 

速度太快了!!!10幾毫秒就顯示了!

于是小研究了一下TABLESAMPLE,不看不知道,原來TABLESAMPLE隨機選取的單位是數據頁,也就是說如果數據量很小的話很可能有取不到數據的可能,試一下果然如此!也就是說別的問題又出現了。

問題又回到了起點。。。難道真的就要用NEWID了嗎?正當山人我感慨的時候在MSDN上無意中看到了這段文字:

SQL Server數據庫隨機抽取數據效率優化總結篇

感覺有戲!!

于是又寫了這第四版代碼:

  1. Declare @d Datetime  
  2.  
  3. Set @d=getdate()  
  4.  
  5. SELECT Top 1* FROM [TGBus_Card].[dbo].[Ka_Card]   
  6.  
  7. WHERE 0.01 >= CAST(CHECKSUM(NEWID(), CardNo) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)  
  8.  
  9. And ActivityID = 501 And State = 0 
  10.  
  11. Select [語句執行花費時間(毫秒)] = Datediff(ms,@d,Getdate()) 

這也是我最終采用的方法,SQL執行速度在1毫秒左右。

相信通過上面的介紹,SQL Server隨機抽取數據的快捷方法也就很明顯了,就是利用上面的代碼片段4中的方法,速度是最快的。本文就介紹到這里,希望本次的介紹能夠帶給您一些收獲。

【編輯推薦】

  1. SQL SERVER 數據挖掘之理解內容類型
  2. SQL SERVER數據挖掘之理解列的用法
  3. SQL Server數據庫主鍵及復合主鍵的配置
  4. SQL Server數據庫如何更改SA密碼和默認端口號
  5. SQL Server 2008 Analysis Services建立多維數據集
責任編輯:趙鵬 來源: 博客園
相關推薦

2009-03-11 15:40:20

2011-03-28 17:12:36

sql server數優化

2011-08-29 10:55:03

SQL Server分頁存儲過程優化效率分

2011-04-06 11:16:47

SQL Server數查詢優化

2024-04-02 08:21:45

數據庫日志SQL

2014-07-18 09:33:53

數據庫數據庫優化

2010-07-14 09:17:17

SQL Server數

2009-07-06 21:20:34

SQL Server數

2011-04-06 11:34:52

SQL Server數查詢優化

2010-07-15 17:28:50

SQL Server

2009-05-19 10:22:29

數據庫表格隨機讀取數據庫

2011-08-09 12:15:08

SQL Server日志已滿

2009-01-27 21:00:00

服務器數據庫SQL Server

2011-08-22 12:01:36

SQL Server代碼優化

2020-10-15 09:10:02

MySQL性能優化

2010-06-28 14:56:24

優化SQL Serve

2010-07-08 17:33:21

SQL Server數

2010-07-06 16:24:53

SQL Server數

2011-08-16 17:31:24

SQL Server訪問速度

2021-05-17 06:57:34

SQLServer數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产综合久久久动漫日韩 | 一区二区三区在线免费观看 | 久久国产精品视频 | 91久久精品一区二区二区 | 四虎影院在线播放 | 欧美极品视频在线观看 | 国产成人99久久亚洲综合精品 | 精品动漫一区 | 在线视频成人 | 色就是色欧美 | 久久这里只有 | 欧美日韩视频在线播放 | 影音先锋中文字幕在线观看 | 久久久久久亚洲国产精品 | 成人精品一区二区 | 99只有精品 | 亚洲精品久久久一区二区三区 | 九九热精品视频在线观看 | 日韩欧美三级电影 | 国产免费一区 | 一级毛片黄片 | 久久国产精品久久国产精品 | 欧美性视频在线播放 | 国产成人精品一区二 | 在线国产一区 | 成人不卡在线 | 涩涩视频网站在线观看 | 久色视频在线 | 久久国际精品 | 精品国产伦一区二区三区观看方式 | 黄色亚洲网站 | 国产成人精品一区二区三区视频 | 日本理论片好看理论片 | 欧美一级片a | 国产乱码精品1区2区3区 | 91新视频 | 亚洲a一区二区 | 欧美一区二区三区 | 国产精品免费在线 | 国产成人自拍一区 | 精品国产乱码久久久久久影片 |