【发布时间】:2012-08-27 13:22:25
【问题描述】:
我想知道对于包含超过 2.000.000 条记录的表优化 SQL 查询的响应时间的最佳解决方案是什么
作为一个解决方案,我想到了一个虚拟表,通过创建一个SQL视图(实际上我更喜欢mysql在今年创建的行中搜索早期,因为这个应用程序的数据是基于季节的。)
有没有更好的解决方案或建议?
例如搜索租金 12 的所有租金行
之前 => select * fromrent_lines whererent_id = 12
现在 => 我创建了一个视图
CREATE VIEW v_rent_lines
AS SELECT rent_id, category_id, customer_id, amount ..
Where rent_lines FROM created_at > = (select starts_on from seasons where current = true)
select * from v_rent_lines Where rent_id = 12
注意事项:
数据库引擎正在使用 InnoDB
我添加了索引表(index_rent_lines_on_rent_id、index_rent_lines_on_category_id、index_rent_lines_on_customer_id)
rent 有很多rent_lines
【问题讨论】:
-
我们需要更多细节来处理。向我们展示有问题的查询。给我们所涉及的表的架构。
-
这实际上取决于您的数据库结构以及您要执行的查询。另外:“什么是最好的 X”问题往往在这里被关闭,因为它们没有确切的答案并导致无休止的讨论。请尽量让您的问题更具体。
-
通常最简单的解决方案是添加索引并启用 sql 引擎缓存(例如查询缓存),但它仅适用于 SELECT 查询。如果您的 SELECT/INSERT 比率小于 1000/1,答案就不那么简单了。
-
我添加了其他信息 thx
-
@SlimTekaya 我们仍然需要查看架构和索引。
标签: mysql ruby-on-rails performance view query-optimization