避免创建临时表/进行"本地左连接" PHP MySQL

时间:2016-03-01 22:21:40

标签: php mysql

我有这三个查询,我必须多次(一个月的每一天)。这需要花很多时间。

$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?

2 个答案:

答案 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注入攻击。