我有小部件的表格看起来像:SQL查询来查找连接表行作为总结的计数每行
id (integer)
referrer (varchar(255))
width (integer)
height (integer)
...和其他一些人。
我也有事件看起来像一个表:
id (integer)
widgetid (integer)
eventtype (string)
created_at (datetime)
...和其他一些人。
我在寻找一个数据样本表,它为每个窗口小部件找到关于它自己和某些事件类型的相关事件的详细信息(一次针对事件类型A,B和C,一次针对事件类型A只要)。
我需要使用非特定厂商(即ANSI SQL)对于这一点,就需要在PostgreSQL的工作既以及MySQL的。
我想一些类似于此,但它是非常缓慢:
SELECT w.id, w.referrer, w.width, w.height, COUNT(e.widgetid), COUNT(f.widgetid)
FROM widgets w
JOIN events e on (e.widgetid = w.id AND e.eventtype = 'A')
JOIN events f on (f.widgetid = w.id AND f.eventtype IN ('A','B','C'))
GROUP BY w.id;
,但它是令人难以置信的慢(自然)。 在e.widgetid,e.eventtype和w.id上有索引。
我在构建这个权利,我该如何加快速度(尽管在widgetid上编制索引)?
我想过要做子查询,但不知道每行的小部件ID(是否有一个函数?)我还没有很远。
我也不完全确定哪个JOIN我应该使用。我想(但纠正我,如果我错了)左或内联合适合这一点。
干杯
是MySQL还是PostgreSQL,请删除其中的一个 – nrathaus
它需要在MySQL和PostgreSQL上工作。 –
既然你正在使用JOIN,你能告诉我们你有什么索引(如果有的话)? – nrathaus