我想知道是否有人对我的直方图生成查询有一些建议。我有一个我喜欢的查询(因为它有效),但它非常慢。这是背景:
我有一个元数据表,一个数据值表,其中 meta_data 中的一行是 data_values 中许多(可能是几千)行的键行,还有一个直方图 bin 信息表:
create table meta_data (
id int not null primary key,
name varchar(100),
other_data char(10)
);
create table data_values (
id int not null primary key,
meta_data_id int not null,
data_value real
);
create table histogram_bins (
id int not null primary key,
bin_min real,
bin_max real,
bin_center real,
bin_size real
);
以及创建直方图的查询:
SELECT md.name AS `Name`,
md.other_data AS `OtherData`,
hist.bin_center AS `Bin`,
SUM(data.data_value BETWEEN hist.bin_min AND hist.bin_max) AS `Frequency`
FROM histogram_bins hist
LEFT JOIN data_values data ON 1 = 1
LEFT JOIN meta_data md ON md.id = data.meta_data_id
GROUP BY md.id, `Bin`;
在此查询的早期版本中,BETWEEN ... AND 逻辑语句在 JOIN 中已关闭(替换 1 = 1),但我只会收到频率非零的直方图行。出于分析目的,我需要所有箱(甚至是零频率箱)的行。
它非常缓慢,大约10-15分钟左右。data_values 表有大约 790 万行,而 meta_data 有 15,900 行——所以可能需要很长时间!
非常感谢!