繁体   English   中英

建议“优化SQL查询的响应时间”

[英]Recommendation “to optimize the response time of an SQL query”

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

作为一个解决方案,我通过创建一个SQL视图来考虑虚拟表(实际上,我更喜欢使用mysql在今年创建的行中进行搜索,因为此应用程序的数据基于季节。)

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

例如,搜索所有租金线12

before => select * from rent_lines其中rent_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

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

你有很多选择。

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

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

  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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM