【发布时间】:2019-12-03 06:39:55
【问题描述】:
我的查询如下。这里我使用连接查询来获取数据。你能建议我如何解决“将 HEAP 转换为 MyISAM”的问题。
我可以在这里使用子查询来更新它吗?请建议我该怎么做。
这里我加入了 users 表来检查用户是否存在。我可以在不加入的情况下对其进行改进,以便“将 HEAP 转换为 MyISAM”可以解决。
哦,有时我不会检查特定的 user_id。像这里我添加了 user_id = 16082
SELECT `user_point_logs`.`id`,
`user_point_logs`.`user_id`,
`user_point_logs`.`point_get_id`,
`user_point_logs`.`point`,
`user_point_logs`.`expire_date`,
`user_point_logs`.`point` AS `sum_point`,
IF(sum(`user_point_used_logs`.`point`) IS NULL, 0, sum(`user_point_used_logs`.`point`)) AS `minus`
FROM `user_point_logs`
JOIN `users` ON ( `users`.`id` = `user_point_logs`.`user_id` )
LEFT JOIN (SELECT *
FROM user_point_used_logs
WHERE user_point_log_id NOT IN (
SELECT DISTINCT return_id
FROM user_point_logs
WHERE return_id IS NOT NULL
AND user_id = 16082
)
)
AS user_point_used_logs
ON ( `user_point_logs`.`id` = `user_point_used_logs`.`user_point_log_used_id` )
WHERE expire_date >= 1563980400
AND `user_point_logs`.`point` >= 0
AND `users`.`id` IS NOT NULL
AND ( `user_point_logs`.`return_id` = 0
OR `user_point_logs`.`return_id` IS NULL )
AND `user_point_logs`.`user_id` = '16082'
GROUP BY `user_point_logs`.`id`
ORDER BY `user_point_logs`.`expire_date` ASC
【问题讨论】:
-
分享你的
explain执行计划 -
@James 我不确定如何解决这个问题。我可以删除“用户”表连接查询。但其他人加入查询如何优化我不知道该怎么做。
-
在查询的开头添加 EXPLAIN SELCT ..... 然后分享结果
-
您可以添加您的表创建语句,因为存在不必要的 where 子句。更好地了解您的索引和其他列数据类型
-
感谢您提供详细信息。似乎缺少用户表?
标签: mysql join subquery myisam