[英]Which is faster subquery with filter and then join or join the queries and then filter in MYSQL
我有兩張表,一張是用戶表,另一張是專業表。 用戶表中的字段:userid、username、userLocation 專業表中的字段:userid、userSpecialty
現在我想加入兩個表。 請讓我知道哪種方法會更好:
select * from ( select * from user where userLocation = 'value') u inner join specialty s on u.userid = s.userid;
或者
select * from user u inner join specialty s on u.userid = s.userid where userLocation = 'value';
盡量減少記錄數量或 SQL 優化器會自動做到這一點是一種很好的做法嗎?
為了獲得最佳性能,請優先考慮第二個查詢中的模式,即沒有內聯視圖的查詢。
對於較早版本的 MySQL(5.5 及更早版本),第一個查詢將要求 MySQL 運行內聯視圖查詢,並具體化派生表 ( u
)。 完成后,外部查詢將針對派生表運行。 並且該表不會被索引。 對於大型集,這可能會嚴重影響性能。 對於小型集合,單個查詢的性能影響並不明顯。
對於第二個查詢,優化器不會被迫創建和填充派生表,因此有可能獲得更好的性能。
存在合適的索引(或不存在索引)i0ndex 將對性能產生更大的影響。 檢索所有列,包括查詢不需要的列 (SELECT *) 也會對性能產生影響。 指定列的一個子集,即實際需要的表達式,將提供更好的性能,尤其是當覆蓋索引可用以避免查找表的基礎數據頁時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.