1
我有一个表analyticsrecords
:我可以简化这个MySQL查询吗?
-------------------------------------------------------------------------------
recordDataId | analyticsReferenceDataId | analyticsDataKey | analyticsDataValue
--------------------------------------------------------------------------------
16 | 114621208-20161122174835 | recordtype | Course ID
17 | 114621208-20161122174835 | recordtypeid | 78
18 | 114621208-20161122174835 | pageStart | Tue Nov 22 2016 17:48:13
19 | 114621208-20161122174835 | pageEnd | Tue Nov 22 2016 17:48:34
我想通过采取相关的列值“datavalue”列的时间差异来计算花费在球场上的时间和我的查询是:
SELECT
IFNULL((SELECT
TIMESTAMPDIFF(SECOND,
STR_TO_DATE((SELECT analyticsDataValue
FROM analyticsrecorddata
WHERE analyticsDataKey = "pageStart"
AND analyticsReferenceDataId ='114621208-20161122174835'), '%a %b %d %Y %T'),
STR_TO_DATE((SELECT analyticsDataValue
FROM analyticsrecorddata
WHERE analyticsDataKey = "pageEnd"
AND analyticsReferenceDataId ='114621208-20161122174835'), '%a %b %d %Y %T')
)), 0) AS Time_spent,
(SELECT analyticsDataValue
FROM analyticsrecorddata
WHERE analyticsDataKey = "recordtypeid"
AND analyticsReferenceDataId ='114621208-20161122174835') AS Course_id
FROM
`analyticsrecords`
GROUP BY
analyticsReferenceDataId
我可以简化此查询并使其更高效吗?这将需要14秒来计算17000行。
你不能简单地使用适当的数据类型存储数据吗? – Strawberry
不,我们不能,它是一个分析数据,它可以有不同类型的数据,这个表连接到原始事件(点击,花费的时间等)。 – Gokul
即使使用EAV模型,我仍然认为对于每种数据类型都有单独的“空格”(在本例中为“表格”)是很好的做法。 – Strawberry