减少左连接查询执行时间
reduce left join query excution time
我正在开发一个 sql 查询,它可以连接两个 table 并且它 return 有一些结果。
我有 2 个 table,第一个 table 我保存了我的订单,另一个 table 保存了我的点赞信息。
我想向用户显示订单 table 中的图片,用户还不喜欢图片。我使用这个查询
SELECT amg_order.*
FROM amg_order
LEFT OUTER JOIN amg_like ON amg_like.order_id=amg_order.order_id
AND amg_like.user_id=:user_id
WHERE amg_order.status = '1'
AND amg_order.user_id != :user_id
AND (amg_like.user_id != :user_id || amg_like.user_id is null)
ORDER BY amg_order.likeType DESC, RAND()
这个查询return正确的结果但是当like信息超过15000的时候执行这个查询已经6秒了。
有谁知道减少这个时间吗?
对不起我的英文太烂了:)
您可以尝试以下查询。这当然会减少你的一些执行时间。您可以在 select 语句中指定字段名称而不是 * 符号。
这是更新的查询:
SELECT amg_order.* FROM amg_order
LEFT JOIN amg_like ON amg_order.order_id = amg_like.order_id
WHERE amg_order.status= '1' AND amg_order.user_id != :user_id AND (amg_like.user_id != :user_id || amg_like.user_id is null)
ORDER BY amg_order.likeType DESC LIMIT 10;
我正在开发一个 sql 查询,它可以连接两个 table 并且它 return 有一些结果。
我有 2 个 table,第一个 table 我保存了我的订单,另一个 table 保存了我的点赞信息。
我想向用户显示订单 table 中的图片,用户还不喜欢图片。我使用这个查询
SELECT amg_order.*
FROM amg_order
LEFT OUTER JOIN amg_like ON amg_like.order_id=amg_order.order_id
AND amg_like.user_id=:user_id
WHERE amg_order.status = '1'
AND amg_order.user_id != :user_id
AND (amg_like.user_id != :user_id || amg_like.user_id is null)
ORDER BY amg_order.likeType DESC, RAND()
这个查询return正确的结果但是当like信息超过15000的时候执行这个查询已经6秒了。
有谁知道减少这个时间吗?
对不起我的英文太烂了:)
您可以尝试以下查询。这当然会减少你的一些执行时间。您可以在 select 语句中指定字段名称而不是 * 符号。
这是更新的查询:
SELECT amg_order.* FROM amg_order
LEFT JOIN amg_like ON amg_order.order_id = amg_like.order_id
WHERE amg_order.status= '1' AND amg_order.user_id != :user_id AND (amg_like.user_id != :user_id || amg_like.user_id is null)
ORDER BY amg_order.likeType DESC LIMIT 10;