SQL_NO_CACHE

首先要知道Mysql中SQL_NO_CACHE的真正意思,它是The query result is not cached.(“禁止SQL结果集被缓存”),而不是“禁止从缓存中读结果集”,由此可以看出,你的第一次查询没有带SQL_NO_CACHE,所以结果集就被query cache起来了,那么此后的所有这个查询,不管是带不带上SQL_NO_CACHE都会从cache里取,所以才会看起来无效,如果要重新测试,就在查询前先执行一下"FLUSH QUERY CACHE",清空一下query cache就行了。然后再带上SQL_NO_CACHE选项,就没问题了

SQL_CACHE 

   必须先设置query_cache_size

以及设置query_cache_type ,其中 
query_cache_type 这个可以被设置为 (只能是数字) 选项  含义  
0  (OFF, 不缓存或重新得到结果)  
1  (ON, 缓存所有的结果,除了 SELECT SQL_NO_CACHE ... 查询)  
2  (DEMAND, 仅缓存 SELECT SQL_CACHE ... 查询) 

SQL_CALC_FOUND_ROWS
可以查询出总共的行数,不用先count(*)
不过务必要注意在使用前看看是否适合,根据表的引擎,数据量,索引都有关系。