從MSSQL(SQLSERVER)/MYSQL數(shù)據(jù)庫中隨機(jī)取一條或者多條記錄 很多人都知道使用rand()函數(shù)但是怎麼使用可能不是每個(gè)人都知道 摘自樺仔 博文 建立測試表 USE [sss]
GO
CREATE TABLE RANDTEST(ID INT DEFAULT RAND()*100,NAME NVARCHAR(200) DEFAULT 'nihao')
GO
CREATE INDEX IX_RANDTEST_ID ON RANDTEST(ID)
GO
INSERT INTO RANDTEST DEFAULT VALUES
GO 2000
SELECT * FROM RANDTEST
第一種寫法:大家會(huì)想到ORDER BY NEWID()
SET STATISTICS TIME ON
SET STATISTICS IO ON
SELECT TOP 50 [id] FROM [dbo].[RANDTEST]
GROUP BY ID
ORDER BY NEWID()
SET STATISTICS TIME OFF
SET STATISTICS IO OFF
這種寫法使用到索引掃描,而且每次select出來的結(jié)果都是一樣的,都是50條記錄
第二種寫法:
SET STATISTICS TIME ON
SET STATISTICS IO ON
SELECT TOP 50 [t1].[ID] FROM [dbo].[RANDTEST] t1 JOIN (SELECT RAND()*100 AS nid) t2 ON [t1].[ID]>[t2].[nid]
GROUP BY [t1].[ID]
SET STATISTICS TIME OFF
SET STATISTICS IO OFF
跟t2這個(gè)表做比較,而且每次能夠達(dá)到隨機(jī)取一條或者N條記錄的效果 每次select出來的行數(shù)都是不一樣的
|