我有这三个查询,我必须多次(一个月的每一天)。这需要花很多时间。
$sqldia = "CREATE TEMPORARY TABLE today AS (SELECT * FROM booking WHERE day = ".$weekday.")";
$sqldia2 = "CREATE TEMPORARY TABLE taken AS (SELECT * FROM b_users WHERE date = '".$date."')";
$sqldia3 = "SELECT A.from, A.to FROM today A LEFT JOIN turnostomados B ON A.from = B.to WHERE B.confirmed IS NULL";
查询没问题,代码按预期工作但速度很慢。这需要快速查询而不会占用太多资源,因为它可以在很短的时间内使用很多次。
我该如何改进? 有没有办法让当地的左连接"用PHP?
答案 0 :(得分:0)
首先,你不需要临时表(尤其是第二个表,因为它根本没用过):
SELECT
A.from, A.to
FROM booking as A
LEFT JOIN
turnostomados as B
ON (A.from = B.to)
WHERE A.day = ".$weekday."
AND B.confirmed IS NULL
然后,运行explain extended
以找出执行计划并为这两个表添加适当的索引
可能您需要预订(day, from, to)
答案 1 :(得分:0)
按turnostomados
表示taken
你的意思是$sql = "SELECT A.from, A.to FROM booking A LEFT JOIN b_users B ON A.from = B.to
WHERE B.confirmed IS NULL AND A.day = ".$weekday." AND B.date = '".$date."'"
而你忘了翻译它......那么你只需要一个查询:
$weekday
此外,请确保$date
和/
已正确清理,否则您很容易受到SQL注入攻击。