C#随机取部分数据

每次进来这个方法的时候,都使用Guid进行一次排序,然后再取前面N条。这样的好处是对内存基本不会产生负荷,因为它是现在数据库内进行排序,取出N条数据之后,才放到浏览器上。

问:为了从查询中返回指定数量的行,使用 TOPN 子句比使用SET ROWCOUNTN
语句要快吗?
答:在正确进行了索引的情况下,TOP N 子句和SET ROWCOUNT N
语句是一样快的,但是如果数据未经过排序,TOP N
要快一些。在输入未排序的情况下,TOP N
操作时使用一个经过排序的小的中间临时表,而且操作时仅仅替换该表的最后一行。如果输入是近似排序的,TOP
N
引擎必须删除或插入最后行,但只需几次操作即可。近似排序意味着您正在处理的堆集在初始构建时可进行有序的插入操作,并且不需要进行很多的更新、删除、向前移动指针等操作。
 
排序一个近似排序的堆集比排序一个巨大的表要更有效率。在一次测试中,使用TOP
N 来对一个由无序插入操作构建的并且含有同样的行数的表进行排序,发现TOP N
的效率也不高。通常,在进行过索引和未进行过索引的情况下,I/O时间都是一样的;但是如果没有进行过索引,SQL
Server
必须要进行一次全表扫描。处理器时间和实耗时间说明近似排序的堆集要更有效率一些。但I/O时间是相同的,因为不管怎样SQL
Server都要读取所有的行。
 

但是这样会由于转换为数组类型导致性能下降,千万要避免这种用法。

2.使用Take返回重头开始指定数量的连续元素