select id,name from student where score > 90;
前提是query_cache是开启的,那么执行完这个语句之后,其中缓存的是score>90的记录的列d,name列呢,还是score>90的所有记录呢?
楼主,拿你这一句来说“select id,name from student where score > 90;”,你把id和name调转过来“select name,id from student where score > 90;”这两条的查询所对应的缓存是不一样的,一定要是完全一样的sql语句。比如你开启了缓存,前一句sql语句查询所用时间是3秒,这条语句已经放入缓存了,然后你把这条语句再执行一遍,所用的时间就是0秒,因为已经你是直接查询的缓存。但是如果你把id,name换个顺序,再查询,这是建立了一个新的缓存,所以这个查询时间可能又是3秒钟了。所以你的问题,score>90肯定记录的是列id,name,而不是score>90的所有的列。
据我了解是缓存的这个select出来的结果集 应该只有id和name两个字段的,
你可以每次都清理一下缓存,试试,这个还是比较靠谱的
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
DBCC FREESYSTEMCACHE ( 'ALL' )