MySQL:使用内存存储引擎来提高此查询的性能

标签 mysql performance memory memory-table

我有这个用例:我需要在同一个表上多次执行相同的“逻辑”查询,固定次数(相同的语义,仅改变与“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;

Perform the queries over tmp_table_name

DROP TABLE tmp_table_name;

参见MySQL docs: The MEMORY (HEAP) Storage Engine

谢谢。

最佳答案

MEMORY 会提高性能吗?基本上没有。

不,如果你不能使用MEMORY,你就不能使用MEMORY - see limitations

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

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

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

否 - 如果 VARCHAR 在您的版本中变成 CHAR,则 MEMORY 表可能比非 MEMORY 表大得多,从而会出现其他问题。

也许——如果所有内容都缓存在 RAM 中,MEMORY 将以大约相同的速度运行。

您的特定示例可能会加速

  • 使用合适的“复合”索引。 (请向我们展示您的选择的详细信息)
  • 创建和维护汇总表——如果这是“数据仓库”应用程序。 (再次,让我们看看详细信息。)

关于MySQL:使用内存存储引擎来提高此查询的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29652290/

相关文章:

Php/Mysql 进程存在用户和管理员权限问题

mysql - 插入 MySQL 表或更新(如果存在)

android - 如何知道用户已从应用程序中的 1 个位置单击任何 Activity 屏幕

c# - int[,] 数组与 Dictionary<> 的效率比较,用于不断更新

javascript - 是否建议缓存仅在 Javascript 中使用两次的对象?

c - 故障 DLL(ISAPI 筛选器)

java - 是内存泄漏吗?为什么 java.lang.ref.Finalizer 吃掉这么多内存

php - LocalHost 数据库不存储查询?

php - 从动态形式插入mysql

android - Square LeakCanary 找不到符号