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
このクエリを簡素化し、より効率的にすることはできますか? 17000行を計算するのに14秒かかります。
適切なデータ型を使用してデータを保存するだけでは問題ありませんか? – Strawberry
いいえ、それは異なる種類のデータを持つことができる分析データです。この表は元のイベント(クリック、時間など)と結合します。 – Gokul
EAVモデルを使用する場合でも、各データタイプに対して別々のスペース(この場合は「テーブル」)を持たせることをお勧めします。 – Strawberry