SQL 隨機抽樣的總結

2021-05-22 15:22:29 字數 1124 閱讀 5256

對於

sql

隨機抽樣我們常想到的就是

newid()

,但如果對於乙個在百萬、千萬甚至更大海量資料表中抽樣的話,簡單的

newid()

,其效能,效率就不是很理想了。所以在這裡有必要討論一下,擇優而用。

long_goods

是乙個百萬資料的表,

ctrl+l

執行以下語句:

--id_index

是我為主鍵加的乙個非聚焦索引

select

top 1

*from long_goods order

bynewid

()--

查詢開銷

43%

select

top 1

*from long_goods with

(index

=id_index)

order

bynewid

()--

查詢開銷

54%select

top 1 *

from long_goods where id=(

select

top 1 id from long_goods order

bynewid

())--

查詢開銷

1%select

top 1 *

from long_goods where id=(

select

top 1 id from long_goods with

(index

=id_index)

order

bynewid

())--

查詢開銷1%

雖然第三個與第四個的開銷是一樣,但實際應該是第四種優於第三種。

如果ms sql2005

公升級到支援

tablesample

的話,以下語句的抽樣執行效率可為最優的

select

*from long_goods tablesample system (10 percent)

呵呵..

下班了,至於其中原因,下次有空再續

.

mR 隨機抽樣

1.問題由來 google曾經有一道非常經典的面試題 給你乙個長度為n的鍊錶。n很大,但你不知道n有多大。你的任務是從這n個元素中隨機取出k個元素。你只能遍歷這個鍊錶一次。你的演算法必須保證取出的元素恰好有k個,且它們是完全隨機的 出現概率均等 這道題的解法非常多,網上討論也非常熱烈。本文要討論的是...

MySQL隨機抽樣

最近由於需要大概研究了一下mysql的隨機抽取實現方法。舉個例子,要從tablename表中隨機提取一條記錄,大家一般的寫法就是 select from tablename order by rand limit 1。但是,後來我查了一下mysql的官方手冊,裡面針對rand 的提示大概意思就是,在...

R隨機抽樣

x為總體向量 n為樣本容量 replace f表示無放回抽樣 replace t表示放回抽樣 prob可以設定不等概率抽樣 sample x,n,replace f,prob null 用r模擬擲硬幣 h表示正面 t表示反面 有放回抽樣 sample c h t 10,replace t 1 h t...