SELECT TOP 10 * FROM (SELECT * FROM tablename WHERE category = 4) DERIVEDTBL ORDER BY NEWID()
我用上面这句话能实现随机抽取第4章的题,这个和用asp的Randomize()随机抽取在效率或者其它方面有什么不同吗?回的最切中要点,最详细的给分!要是回答得特别好,另加100分!!!
---------------------------------------------------------------
当然从数据库直接返回记录比较好,难道你要得到所有的记录,然后自己坐算法,取4条么?
SELECT TOP 10 * FROM (SELECT * FROM tablename WHERE category = 4) DERIVEDTBL ORDER BY NEWID()
为什么不用
SELECT TOP 4 * FROM tablename WHERE category = 4 ORDER BY NEWID()
效率高出 n 倍,不到万不得已的情况下,不要使用 Sub Query
---------------------------------------------------------------
SELECT TOP 10 * FROM tablename WHERE category = 4 ORDER BY NEWID()
手误
---------------------------------------------------------------
不好意思,我不知道这个是怎样实现“随机抽取”的?
从“SELECT TOP 10 * FROM tablename WHERE category = 4 ORDER BY NEWID()”看,并不觉得是在“随机”呀。
关注中。。。。。。
---------------------------------------------------------------
SELECT TOP 10 * FROM tablename WHERE category = 4 ORDER BY NEWID()
对,最好不要使用子查询!
你用Randomize()还是要再从数据库里抽取呀
---------------------------------------------------------------
应该是从数据库中返回的好。
---------------------------------------------------------------
在网络环境下的应用程序设计原则是减少不必要的网络流量..
如果你只需要10条就不要返回100条.
子查询所耗费的代价远远小于为了额外的网络流量而耗费的代价.
如果你不需要需要考虑平台依赖性,且数据库服务器负载尚未饱和,你应该尽可能的利用数据库的处理能力.
---------------------------------------------------------------
我觉得这样的语句效率不会很高,我猜SQL使用得策略应该是Table Scan,而不是Index Scan
---------------------------------------------------------------
to TMG(Alan)
只要定义了索引,不管是主查询还是子查询都是基于索引进行的.
当然在这里是否需要子查询我并没有进行分析,也许可以使用别的SQL语法实现,但是千万不要以为用asp处理会更有效
---------------------------------------------------------------
不同意楼上所说,如果你在ID列上定义索引, 我要求按照 Description 排序,也会使用索引?答案是否定的,如果这样的话,我想每个表也不需要建立多个索引了
---------------------------------------------------------------
to TMG(Alan)
你说的没错..
我并没有说索引能针对所有字段优化查询速度..
有把常用于检索的字段定义成索引才是最佳的索引定义原则..
因为维护索引的代价是牺牲插入和更新效率的..
---------------------------------------------------------------
最好是先去产生随机的条件,再去这个条件去查询数据表!
如有关键字,可以先产生所需个数的随机关键字,再去数据表中取
子查询是提高效率的!或是用自连接!
---------------------------------------------------------------
Mark~~