SQL_NO_CACHE不起作用

第一次运行此sql时,需要39秒,再次运行并增加SQL_NO_CACHE时,它似乎没有生效:

mysql> select count(*) from `deal_expired` where `site`=8&&`area`=122 && 

endtime<1310444996056;

+----------+

| count(*) |

+----------+

| 497 |

+----------+

1 row in set (39.55 sec)

mysql> select SQL_NO_CACHE count(*) from `deal_expired` where `site`=8&&`area`=

122 && endtime<1310444996056;

+----------+

| count(*) |

+----------+

| 497 |

+----------+

1 row in set (0.16 sec)

我在这里尝试了多种方法

甚至重新启动mysql服务器或更改表名,但我仍然不能让39秒运行此SQL

我替换了另一个SQL,并在第一次运行SQL_NO_CACHE上增加了一个,问题是一样的:

mysql> select SQL_NO_CACHE count(*) from `deal_expired` where `site`=25&&`area`=

134 && endtime<1310483196227;

+----------+

| count(*) |

+----------+

| 315 |

+----------+

1 row in set (2.17 sec)

mysql> select SQL_NO_CACHE count(*) from `deal_expired` where `site`=25&&`area`=

134 && endtime<1310483196227;

+----------+

| count(*) |

+----------+

| 315 |

+----------+

1 row in set (0.01 sec)

是什么原因?如何获得相同的SQL运行时?

我想找到一种方法来优化此SQL以执行39秒

顺便说一句:RESET QUERY CACHEFLUSH QUERY CACHEFLUSH TABLESSET SESSION

query_cache_type=off不起作用

mysql状态缓存已关闭:

mysql> SHOW STATUS LIKE "Qcache%";

+-------------------------+-------+

| Variable_name | Value |

+-------------------------+-------+

| Qcache_free_blocks | 0 |

| Qcache_free_memory | 0 |

| Qcache_hits | 0 |

| Qcache_inserts | 0 |

| Qcache_lowmem_prunes | 0 |

| Qcache_not_cached | 0 |

| Qcache_queries_in_cache | 0 |

| Qcache_total_blocks | 0 |

+-------------------------+-------+

8 rows in set (0.04 sec)

mysql> select count(*) from `deal_expired` where `site`=25&&`area`=134 && endtime<1310

483196227;

+----------+

| count(*) |

+----------+

| 315 |

+----------+

1 row in set (0.01 sec)

mysql> SHOW STATUS LIKE "Qcache%";

+-------------------------+-------+

| Variable_name | Value |

+-------------------------+-------+

| Qcache_free_blocks | 0 |

| Qcache_free_memory | 0 |

| Qcache_hits | 0 |

| Qcache_inserts | 0 |

| Qcache_lowmem_prunes | 0 |

| Qcache_not_cached | 0 |

| Qcache_queries_in_cache | 0 |

| Qcache_total_blocks | 0 |

+-------------------------+-------+

8 rows in set (0.00 sec)


解释此SQL,使用的站点+结束时间复合索引(名为site_endtime):

mysql> explain select count(*) from `deal_expired` where `site`=8&&`area`=122 && endti

me<1310444996056;

+--------+------+-------------------------------+--------------+---------+------

-+------+-------------+

| table | type | possible_keys | key | key_len | ref

| rows | Extra |

+--------+------+-------------------------------+--------------+---------+------

-+------+-------------+

| deal_expired | ref | name,url,endtime,site_endtime | site_endtime | 4 | const

| 353 | Using where |

+--------+------+-------------------------------+--------------+---------+------

-+------+-------------+

1 row in set (0.00 sec)

回答:

答案为“如何获得相同的SQL运行时?”

是-您不能。如果您的查询读取了某些行,则根据使用的存储引擎对其进行缓存,这些行将位于OS缓存(myisam)或缓冲池(innodb)中。如果缓存了行,则第二次运行相同的查询会更快,因为MySQL不必从磁盘读取数据。

以上是 SQL_NO_CACHE不起作用 的全部内容, 来源链接: utcz.com/qa/431458.html

回到顶部