3

我想知道对于包含超过 2.000.000 条记录的表优化 SQL 查询的响应时间的最佳解决方案是什么

作为解决方案,我想到了创建一个SQL视图的虚拟表(其实我更喜欢mysql在今年创建的行中早点搜索,因为这个应用程序的数据是基于季节的。)

有更好的解决方案或建议吗?

例如搜索租金 12 的所有租金行

before => 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_lines

4

1 回答 1

1

在这种情况下,这种观点并没有真正帮助任何事情。作为开发人员,视图主要通过让您按名称引用更复杂的查询而不是一直重复详细信息来帮助您。他们并没有真正帮助mysql。

你有很多选择。

  1. 如果您还没有,请确保您有一个索引,其中rent_id 是索引中的唯一字段,或者是索引中的第一个字段。例如:

    create index rent_id_idx on rent_lines (rent_id)
    
  2. 可以考虑使用mysql的分区系统和rent_id上的分区

  3. 您可以通过执行以下操作来创建具有较低基数的索引:

    alter table rent_lines add rent_id_bucket smallint unsigned not null after rent_id;
    update rent_lines set rent_id_bucket = rent_id>>16;
    alter table rent_lines add key rent_id_bucket_idx(rent_id_bucket);
    

    这将让您执行如下查询:

    select * from rent_lines where rent_id_bucket = 16>>16 and rent_id=16
    
于 2012-09-07T13:47:43.300 回答