簡體   English   中英

哪個是帶過濾器的更快子查詢,然后加入或加入查詢,然后在 MYSQL 中過濾

[英]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.

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