辨識兩個表中遺失的 IP 位址
本指南示範如何在 PostgreSQL login_log
表中有效率地尋找 ip_location
表中缺少的 IP 位址,並且兩者共用 ip
欄位。
最優查詢策略
多種 SQL 方法可以實現此目的,每種方法都有不同的效能特徵:
1。 NOT EXISTS
子查詢:高效能解決方案
通常是 PostgreSQL 中最快的方法:
<code class="language-sql">SELECT ip FROM login_log l WHERE NOT EXISTS ( SELECT 1 -- Selecting 1 is more efficient than selecting ip FROM ip_location WHERE ip = l.ip );</code>
2。 LEFT JOIN
/ IS NULL
:有效的替代方案
效率的有力競爭者:
<code class="language-sql">SELECT l.ip FROM login_log l LEFT JOIN ip_location i USING (ip) WHERE i.ip IS NULL;</code>
3。 EXCEPT
:簡潔但不太靈活
雖然簡潔,但這種方法在複雜查詢中的適應性較差:
<code class="language-sql">SELECT ip FROM login_log EXCEPT ALL SELECT ip FROM ip_location;</code>
4。 NOT IN
:效率最低且需要謹慎
如果可能,請避免使用此方法,尤其是對於 NULL
列中潛在的 ip
值。 它的效率較低,並且需要仔細處理空值以防止意外結果。
<code class="language-sql">SELECT ip FROM login_log WHERE ip NOT IN ( SELECT DISTINCT ip FROM ip_location );</code>
選擇最適合您的查詢複雜性和效能要求的方法。 對於簡單場景,建議使用 NOT EXISTS
或 LEFT JOIN
以獲得 PostgreSQL 的最佳效能。
以上是如何有效地找出一張表中另一張表中缺少的 IP 位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!