簡體   English   中英

避免創建臨時表/進行“本地左連接” PHP MySQL

[英]Avoid creating temporary tables / Make a “local left join” PHP MySQL

我有這3個查詢,我必須多次進行查詢(給定月份的每一天一次)。 這需要很多時間。

$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中進行“本地左連接”嗎?

首先,您不需要臨時表(尤其是第二個表,因為它根本沒有使用):

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)

Asumming通過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注入的攻擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM