【问题标题】:Caching mysql table for performance缓存 mysql 表以提高性能
【发布时间】:2013-08-15 22:36:52
【问题描述】:

在我的页面中,我有多个查询来从具有不同场景的同一张表中获取数据。这些多个查询给我带来了性能问题。所以我试图缓存表,然后用不同的场景查询它,这样我就不需要一直访问数据库。

但是,我不知道如何缓存表并从中查询。

有人可以帮忙吗?

还有其他方法可以提高性能吗?

【问题讨论】:

  • 表中有多少数据?整个数据库中有多少数据?你有多少物理内存?
  • DBMS 的大部分功能是缓存文件数据和查询数据。添加更多缓存层可能是一种解决方案,但前提是您已用尽所有其他途径。

标签: mysql performance caching


【解决方案1】:

缓存表很容易:select * from myTable,并将数据读入数组。然后,您必须自己使用您选择的语言进行搜索。对于小表和简单查询,这可能会更快。对于大表可能会遇到内存问题,复杂的查询会变得更加困难。

有许多潜在的方法可以提高性能。将索引添加到适当的列可以产生不同的结果,执行查询和子查询的确切顺序也是如此。如果不知道您正在使用的架构或您正在应用的查询,就无法说更多。

【讨论】:

    【解决方案2】:

    你有几个选择:

    • 如果您的物理 RAM 远大于数据库的大小,请将 innodb_buffer_pool_size 变量设置为大于您的数据库的值。 InnoDB 会自动将表缓存在 RAM 中,直到它们发生变化。
    • 如果您的 RAM 远大于您感兴趣的 表 的大小,但又不想依赖 InnoDB 的缓存,请尝试使用 MEMORY 存储引擎

    MEMORY 表只存在于 RAM 中,因此速度很快;它们不会持续存在,但如果您只是想要一个考虑到这一点的缓存版本,试试这个:

    CREATE TABLE cachedcopy LIKE table;
    ALTER TABLE cachedcopy ENGINE=MEMORY;
    INSERT INTO cachedcopy SELECT * FROM table;
    

    如果您的表比可用 RAM 大(或者您不能为其专用内存),您将不得不使用其他技术,例如创建索引或修剪每个查询处理的数据。

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多