MySQL: 使用 MEMORY STORAGE ENGINE 提高查询性能
MySQL: using the MEMORY STORAGE ENGINE to improve the performance of this queries
我有这个用例:我需要多次执行相同的 "logic" 查询,固定次数,相同的 table (相同的语义,仅改变与比较 "WHERE" 个语句。
查询布局:
SELECT [(SUM(col_name),col_name,...)]
FROM table_name
WHERE expr AND expr...
我假装提高了这项任务的表现。
通过阅读我在这里找到的有关此问题的文章以及一些额外的研究,我可以指出以下相关事实:
- 未使用内部临时表(在查询中使用 EXPLAIN)
- 未使用查询缓存(不相同 查询)
如果我在内存(RAM,ENGINE=MEMORY)中创建一个临时 table 来镜像有问题的 table,然后在这个内存中 table 上执行所有查询, 我可以提高性能吗?:
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 - see limitations
不,如果您花费太多时间创建 table,MEMORY 会变慢。
否,因为副本不是最新的。 (好的,也许这不是问题。)
不,因为您正在从其他缓存中窃取,使 其他 查询变慢。
否 -- 如果 VARCHARs 在您的版本中变成 CHARs,MEMORY table 可能比非 MEMORY table 大得多,其他问题就会发挥作用。
也许 -- 如果一切都缓存在 RAM 中,MEMORY 将 运行 以大致相同的速度。
您的特定示例可能会被加速
- 使用 suitable "compound" 索引。 (请向我们展示您的 SELECT 的详细信息)
- 创建和维护汇总表 -- 如果这是一个 "Data Warehouse" 应用程序。 (再次,让我们看看细节。)
我有这个用例:我需要多次执行相同的 "logic" 查询,固定次数,相同的 table (相同的语义,仅改变与比较 "WHERE" 个语句。
查询布局:
SELECT [(SUM(col_name),col_name,...)]
FROM table_name
WHERE expr AND expr...
我假装提高了这项任务的表现。
通过阅读我在这里找到的有关此问题的文章以及一些额外的研究,我可以指出以下相关事实:
- 未使用内部临时表(在查询中使用 EXPLAIN)
- 未使用查询缓存(不相同 查询)
如果我在内存(RAM,ENGINE=MEMORY)中创建一个临时 table 来镜像有问题的 table,然后在这个内存中 table 上执行所有查询, 我可以提高性能吗?:
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 - see limitations
不,如果您花费太多时间创建 table,MEMORY 会变慢。
否,因为副本不是最新的。 (好的,也许这不是问题。)
不,因为您正在从其他缓存中窃取,使 其他 查询变慢。
否 -- 如果 VARCHARs 在您的版本中变成 CHARs,MEMORY table 可能比非 MEMORY table 大得多,其他问题就会发挥作用。
也许 -- 如果一切都缓存在 RAM 中,MEMORY 将 运行 以大致相同的速度。
您的特定示例可能会被加速
- 使用 suitable "compound" 索引。 (请向我们展示您的 SELECT 的详细信息)
- 创建和维护汇总表 -- 如果这是一个 "Data Warehouse" 应用程序。 (再次,让我们看看细节。)