簡體   English   中英

連接中過濾器的 SQL 性能與結果中的

[英]SQL performance of filter in join vs in results where

我需要加入 2 個表,但其中一個有一個必須應用的常量過濾器,我的問題是在性能方面哪個選項更好:

  1. 在“FROM”上使用常量過濾器並設置如下別名:

     SELECT <result fields> FROM (SELECT <table A fields> FROM filtered_table WHERE field = value) AS A LEFT OUTER JOIN tableB ON A.id = tableB.id
  2. 在主查詢的WHERE中設置過濾器:

     SELECT <result fields> FROM filtered_table AS A LEFT OUTER JOIN tableB ON A.id = tableB.id WHERE a.field = value

大多數數據庫會將這兩種形式視為相同的——它們在邏輯上是相同的,優化器知道這一點。

一些數據庫傾向於物化子查詢。 MySQL就是其中之一。 在該數據庫中,子查詢可能會更昂貴,因為它會寫出子查詢。

我建議在沒有子查詢的情況下編寫代碼。 它的編寫和讀取都更簡單,而且它的性能永遠不會比子查詢方法差。

暫無
暫無

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

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