需要优化:用特定的数字中选择记录

我有很多行的表。 它被编入索引。 一个是我经常做的是选择从该表中随机记录的操作。 要做到这一点,我用下面的SQL语句:

SELECT TOP 1 * FROM ( SELECT TOP (@RecNo) * FROM Table ORDER BY Date ASC ) AS subquery1 ORDER BY Date DESC ;

其中,@RecNo是随机数。 查询需要烦人大量的时间来运行。 任何想法可能在这里最优化?

--------------解决方案-------------

尝试通过聚集主键订购它。 或者在您的聚集主键ORDER BY子句。

既然你是在SQL 2005,请尝试​​使用ROW_NUMBER()函数:

http://msdn.microsoft.com/en-us/library/ms186734.aspx

基本上是这样的:

SELECT * FROM Table WHERE (ROW_NUMBER() OVER Date ASC) = @RecNo

您可能需要使用一个子查询或CTE使用ROW_NUMBER()值的谓语。

我不知道这是否会最终会被比快NEWID()方法。 取决于是否将SQL短路ROW_NUMBER()操作时,它发现它寻找的值。 最坏情况下,它会产生一个ROW_NUMBER()为每一行,最好的情况,将尽快找到行停止可能是第一行。)。

这也有可能是生产ROW_NUMBER()的每一行是不是生成一个GUID,或以其他方式排序整个表格显著更快。

什么是你真正想要实现? 我想你只想得到一个随机行。 最简单的方式做,这将是

SELECT TOP 1 * FROM Table ORDER BY newid()

有多少控制你有在桌子上?

你能不能介绍一个新的“ROW_ID”列? 随后指数在新列,并简单地做:

SELECT * FROM Table WHERE row_id = @RecNo

分类:SQL服务器 时间:2015-03-15 人气:0
本文关键词: SQL服务器
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.511 (s). 10 q(s)