提高mysql查询效率
我试图做的是从Enswitch\u Mobile\u Users表中提取id、phone\u type、os\u version列 有了这个id,我只需要从enswitch_用户表中获取enswitch_id 然后,统计所有来自Enswitch_Android_购买或Enswitch_Iphone_购买的、用户Colu与Enswitch_mobile_用户id匹配的实体。获取第一次入境日期和最后一次入境日期 我成功地实现了这个查询:提高mysql查询效率,mysql,database,Mysql,Database,我试图做的是从Enswitch\u Mobile\u Users表中提取id、phone\u type、os\u version列 有了这个id,我只需要从enswitch_用户表中获取enswitch_id 然后,统计所有来自Enswitch_Android_购买或Enswitch_Iphone_购买的、用户Colu与Enswitch_mobile_用户id匹配的实体。获取第一次入境日期和最后一次入境日期 我成功地实现了这个查询: SELECT p.user AS `Mobile_User_
SELECT p.user AS `Mobile_User_ID`,
e.os_version `Os_Version`,
e.phone_type `Phone_Type`,
eu.enswitch_id `Enswitch_ID`,
Count(1) AS `Buy_Count`,
(SELECT pc.date
FROM
(
SELECT date, user, status
FROM enswitch_android_purchases
UNION
SELECT date, user, status
FROM enswitch_iphone_purchases
) AS pc
WHERE pc.status = 1
AND pc.user = p.user
ORDER BY pc.date ASC
LIMIT 1) AS `First_Purchase`,
(SELECT pc.date
FROM
(
SELECT date, user, status
FROM enswitch_android_purchases
UNION
SELECT date, user, status
FROM enswitch_iphone_purchases
) AS pc
WHERE pc.status = 1
AND pc.user = p.user
ORDER BY pc.date DESC LIMIT 1) AS `Last_Purchase`
FROM
(
SELECT item, date, user, status
FROM enswitch_android_purchases
UNION
SELECT item, date, user, status
FROM enswitch_iphone_purchases
) AS p
LEFT JOIN enswitch_mobile_users e
ON p.user = e.id
LEFT JOIN enswitch_users eu
ON e.user_id = eu.id
WHERE p.`date` >= :from_date
AND p.`date` <= :to_date
AND p.user is not null
AND p.status = 1
GROUP BY `Mobile_User_ID`
但是由于选择的原因,速度会非常慢,因此如何提高效率?您可以使用以下选项,将选择列表中的两个选择替换为minp.date和maxp.date:
您能否显示表模式以使其更简单?
SELECT p.user AS `Mobile_User_ID`,
e.os_version `Os_Version`,
e.phone_type `Phone_Type`,
eu.enswitch_id `Enswitch_ID`,
Count(1) AS `Buy_Count`,
min(p.date) AS `First_Purchase`,
max(p.date) AS `Last_Purchase`
FROM
(
SELECT item, date, user, status
FROM enswitch_android_purchases
UNION
SELECT item, date, user, status
FROM enswitch_iphone_purchases
) AS p
LEFT JOIN enswitch_mobile_users e
ON p.user = e.id
LEFT JOIN enswitch_users eu
ON e.user_id = eu.id
WHERE p.`date` >= :from_date
AND p.`date` <= :to_date
AND p.user is not null
AND p.status = 1
GROUP BY p.user