[英]How to optimize this query more?
SELECT mem.name,
mem.regdate,
stat.level
FROM stats AS stat
INNER JOIN members AS mem
WHERE stat.id = mem.id
AND mem.ref = {$members['id']}
stats
和members
表的索引為id
。 但是,當我運行查詢時,它會檢查stats
表中的所有行(在members
表中只需要一行)。 有什么想法我做錯了嗎? 謝謝。
使用正確的ANSI-92 JOIN語法-在ON子句中指定了JOIN標准:
SELECT mem.name,
mem.regdate,
stat.level
FROM stats AS stat
JOIN members AS mem ON mem.id = stat.id
WHERE mem.ref = {$members['id']}
如果沒有JOIN條件,MySQL將返回笛卡爾乘積,然后將WHERE子句應用於這些結果。 幾乎所有其他數據庫都會告訴您,您提供的查詢存在語法錯誤。
另外, INNER
關鍵字是可選的。
嘗試從主表中選擇(在這種情況下,我認為是成員),並加入具有統計信息的統計信息以獲取更多信息。 使用ON定義統計信息如何連接到成員,並使用WHERE限制成員表的結果。
SELECT mem.name, mem.regdate, stat.level
FROM members AS mem
INNER JOIN stats AS stat
ON stat.id = mem.id
WHERE mem.ref = {$members['id']}
由於它是一個INNER JOIN,因此您也可以將其翻轉(從統計數據中選擇,加入成員),但是考慮到您正在尋找某個成員,這可能更有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.