【发布时间】:2024-01-23 12:46:01
【问题描述】:
我需要有关我的 sql 选择的帮助。 MySQL 5.7 版本
这是我的桌子
create table if not exists OffersDayReport
(
id int auto_increment
primary key,
aff_id int not null,
aff_manager_id int not null,
source text null,
adv_id int not null,
adv_manager_id int not null,
offer_id int not null,
offer_category_id int not null,
country char(2) null,
browser varchar(255) null,
deviceType varchar(255) null,
deviceOS varchar(255) null,
preLander varchar(11) null,
goal int null,
offerPage int null,
visits int not null,
clicks int not null,
conversions int not null,
payoutInUSD decimal(10,2) not null,
revenueInUSD decimal(10,2) not null,
profitInUSD decimal(10,2) not null,
brokenRevenueInUSD decimal(10,2) not null,
time int not null,
constraint unique_row
unique (time, aff_id, offer_id, source, country, browser, deviceType, deviceOS, preLander, goal, offerPage)
)
charset=utf8;
这里是一个选择的例子:
SELECT OffersModel.lead as default_lead,
OffersDayReport.offer_id as report_title_offer_id,
OffersModel.name as offers_name,
sum(OffersDayReport.visits) as report_title_visits,
sum(OffersDayReport.clicks) as report_title_clicks,
sum(OffersDayReport.conversions) as report_title_conversions,
sum(OffersDayReport.payoutInUSD) as report_title_payout,
sum(OffersDayReport.revenueInUSD) as report_title_revenue,
sum(OffersDayReport.profitInUSD) as report_title_profit,
sum(OffersDayReport.conversions) / sum(OffersDayReport.clicks) * 100 as report_title_CR
FROM OffersDayReport
LEFT OUTER JOIN Offers as OffersModel ON OffersModel.id = OffersDayReport.offer_id
WHERE OffersDayReport.aff_manager_id IN ({numbers})
AND OffersDayReport.time >= {some start time}
AND OffersDayReport.time <= {some end time}
GROUP BY OffersDayReport.offer_id;
范围可以是 1 天和 6 个月。 where 子句的可变性可能不同 - aff_manager_id 或 adv_manager_id 或两者等等。
所有行的数量很大 - 大约 1000 亿。
现在我的选择大约需要 3-4 分钟,有时需要 10 分钟。
我尝试了不同类型的索引,但 mysql 分析器不喜欢使用它们。
即使我使用FORCE INDEX() - 我尝试过的所有类型的索引,我的选择也只是缓慢。
【问题讨论】:
-
你看过范围分区吗?
-
@Strawberry 实际上不是。
-
那么 aff_manager 的 IN 数字它包含多少个值?它们可以是查询的结果吗??
-
@scaisEdge 没有多少数字。最大值为 5。
-
我已经发布了一个答案希望有用
标签: mysql sql database indexing innodb