gpt4 book ai didi

MySql 数据范围查询优化

转载 作者:行者123 更新时间:2023-11-29 20:41:35 24 4
gpt4 key购买 nike

我们有一个相当大的 MySql Innodb 表,其中包含以下统计信息,

Rows - 8277943+                     Server Ram - 128 Gb
Avg row Length - 575 Processor - Deca Core Intel
Data Size - 4.4 GB Overall Database Size - 500Gb

问题是我们对此表有多个查询,它们现在运行速度非常慢,并且没有任何优化的想法。例如下面给出的一些查询,

select  TIMESTAMPDIFF(SECOND,w.msgCreatedOn,now()) as rnge
from t_xxx_dtls w
where w.profileId=17901
and w.orgId=1448
and w.actionStartDate BETWEEN '2016-07-27 05:08:00' and '2016-07-27 13:08:59'
and w.currentlyActive=true and w.`action` not in (6,9,17)
and (
w.parentId NOT in (
select CASE WHEN d.parentId IS NOT NULL THEN d.parentId ELSE d.id END as ticketId
from t_xxx_dtls d where d.profileId=17901 and d.orgId=1448 and d.actionStartDate BETWEEN '2016-07-27 05:08:00' and '2016-07-27 13:08:59' and d.action in (2,4,7)
group by ticketId
)
or ( w.parentId is null and w.inReplyId is null)
)
and w.msgId is not null
order by rnge desc
limit 0,1

解释计划 Explain Plan

虽然我们有像下面这样的简单查询,但它们开始陷入困境,

select count(*)
from t_xxx_dtls d
where d.actionStartDate BETWEEN '2016-07-27 05:08:00' and '2016-07-27 13:08:59'

根据解释计划,这是检查非常大量的记录,如何改进。我正在阅读有关分区的内容,但现在确定这是否有帮助。

最佳答案

对于显示的第一个查询,我认为按 (orgId、profileId、actionStartDate) 顺序建立索引会最有帮助。

但是,这对于更简单的第二个查询没有帮助;该索引将从以 actionStartDate 开始的索引中受益。第一个查询也可以从这样的索引中受益,但我不确定当 actionStartDate BETWEEN 时 MySQL 是否会利用 (actionStartDate, orgId, profileId) 索引的后半部分。使用条件。

关于MySql 数据范围查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38620054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com