从MSSQL(SQLSERVER)/MYSQL数据库中随机取一条或者多条记录 很多人都知道使用rand()函数但是怎麽使用可能不是每个人都知道 摘自桦仔 博文 建立测试表 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
第一种写法:大家会想到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出来的结果都是一样的,都是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这个表做比较,而且每次能够达到随机取一条或者N条记录的效果 每次select出来的行数都是不一样的
|