【问题标题】:MySQL best practices to use SQL_CACHE and SQL_NO_CACHEMySQL 使用 SQL_CACHE 和 SQL_NO_CACHE 的最佳实践
【发布时间】:2012-01-27 18:21:05
【问题描述】:

MySQL 允许我们使用SQL_CACHESQL_NO_CACHE 选项创建选择语句。这些选项会影响查询缓存中查询结果的缓存。但是对于哪些查询最好使用SQL_CACHE 选项,以及哪个SQL_NO_CACHE 选项?或者根本不用它更好?

【问题讨论】:

    标签: mysql caching


    【解决方案1】:

    一般来说,您根本不必使用它。 SQL_CACHE 仅在默认情况下未缓存查询时才需要,它们在默认配置中。如果您知道在不久的将来不会再次使用特定查询,SQL_NO_CACHE 很有用,尤其是在结果集很大的情况下。目标是避免将不再需要的结果弄乱缓存。

    【讨论】:

    • 特别是关于 SQL_NO_CACHE - 在缓存结果不会为以后重用带来好处的情况下使用它。您应该这样做的原因是,如果您有许多缓存但从未使用过的查询,您将降低 mySQL 的速度,因为它会花费越来越多的时间来管理缓存。当人们设置非常大的 query_cache 大小时,这一点变得尤为明显,因为刷新旧条目的时间随着大小的增长而增长。这就是为什么有选项 0,1,2 来改变 mySQL 中 query_cache 的行为。
    • @Michael,实际上生产服务器的推荐配置是关闭关闭查询缓存。
    【解决方案2】:

    我在调试查询速度时使用SQL_NO_CACHE。

    【讨论】:

    • 当您测试查询时,测量它们的执行时间很有用,而不是从缓存中获取它们。从缓存中获取比从数据库中获取快得多,因此在不知道是来自数据库还是缓存的情况下比较结果是没有意义的。
    【解决方案3】:

    首先,您需要更新您的 my.cnf (LINUX) 或 my.ini (WINDOWS) 文件。

    query_cache_type=2

    如果值为 2,则它是按需的,这意味着您可以选择在要缓存的查询结果上使用 SQL_CACHE

    如果是 0 ,则查询缓存没有被激活。

    如果为 1 ,则所有查询都缓存在数据库中。 如果您不想缓存某些特定查询,可以使用 SQL_NO_CACHE

    但您应该注意,如果您的表经常更新,查询缓存结果将失效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2021-08-22
      • 2011-04-22
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多