我的数据库目前有10万条记录,按规定,用户每天都要从这10万条记录中看别人发给自己的文件,其实,每天每个用户平均也就10-20个文件需要看。但如果某个用户出差了,他可能会积累很多文件没有看,但这些没看的文章是去年的或很早以前的,他看了也没有意义。
所以,我想要提取:用户所有未看的文件,并且我想直接从最近1000条的记录中提取,而不是10万条中抽取。那么,我写了这样几条,让大家评价一下,并希望大家能给我大家的最佳语句:
1/select top 1000 mID,title from wenjian where isSee=yes;2/select mID,title from wenjian where mID>((select top 1 mID form wenjian order by mID desc)-1000) and isSee=yes;
   --上语句的意思是:先提取出最高的mID号,然后减去1000,最后从这最近的1000条记录中提取需要的内容。但这条语句减去1000,如果用户中间有删除的mID,就有可能不是1000条记录。但这对我们来讲是没关系的。3、select mID,title from wenjian where isSee=yes and mID>((select top 1 mID form wenjian order by mID desc)-1000)
  --这条语句盒上条语句除了把isSee=yes提前之外,没有别的变化,我写的目的,是想问:where中的AND前后在执行时,有先后关系吗?比如这条,如果用户先从10万条记录中找取isSee=yes然后在执行后条语句,这样效率反而会更底下;如果用户先把前1000条记录提取了,那么再从这前1000条中筛选isSee=yes,我想效率会好些。
当然,我也不知道在MSSQL中TOP的执行效率如何,如果select top 1 mID form wenjian order by mID desc语句本身就很费劲的话,那第二条的效率也不会怎样。4、select mID,title from (select * from wenjian where mID>((select top 1 mID form wenjian order by mID desc)-1000)) where isSee=yes;
这第4条语句先把前1000条的内容都提取出来了,然后从这1000条记录中再筛选isSee=yes的记录。5、我想问:
select top 1000 from wenjian order by mid desc   --mid是主键

select top 1000 from wenjian order by myTime desc --myTime是索引
那条效率更高。