0

我有这个用例:我需要在同一个表上多次执行相同的“逻辑”查询,固定次数(相同的语义,只改变与“WHERE”语句进行比较的值)。

查询布局:

SELECT [(SUM(col_name),col_name,...)]
FROM table_name
WHERE expr AND expr...

我假装要提高这项任务的性能。

通过阅读我在这里找到的关于这个问题的文章以及一些额外的研究,我可以指出以下相关事实:

  • 不使用内部临时表(在查询中使用 EXPLAIN)
  • 不使用查询缓存(不同的查询)

如果我在内存中创建一个临时表(RAM,ENGINE=MEMORY)来镜像相关表,然后在这个内存表上执行所有查询,我可以提高性能吗?:

CREATE TABLE tmp_table_name ENGINE=MEMORY SELECT * FROM table_name;

对 tmp_table_name 执行查询

DROP TABLE tmp_table_name;

请参阅MySQL 文档:内存(堆)存储引擎

谢谢。

4

1 回答 1

0

MEMORY 会提高性能吗?大多数情况下没有。

不,如果您不能使用 MEMORY,则不能使用 MEMORY -请参阅限制

不,如果您花费太多时间创建表,MEMORY 会变慢。

不,因为副本不会是最新的。(好吧,也许这不是问题。)

不,因为您正在从其他缓存中窃取信息,从而使其他查询变慢。

不——如果 VARCHAR 在您的版本中变成 CHAR,则 MEMORY 表可能比非 MEMORY 表大得多,以至于其他问题会出现。

也许——如果一切都缓存在 RAM 中,MEMORY 将以大致相同的速度运行。

您的特定示例可能会加速

  • 使用合适的“复合”索引。(请向我们展示您的 SELECT 的详细信息)
  • 创建和维护汇总表——如果这是一个“数据仓库”应用程序。(再次,让我们看看细节。)
于 2015-04-18T07:59:56.797 回答