mysql and 和where,关于mysql:连接sql查询中where和and子句的区别
本問題已經有最佳答案,請猛點這里訪問。
下面兩個SQL查詢有什么區別
和
號
根據以下兩個測試結果
速度更快(237比460)。據我所知,這是一個標準。
。
氧化鎂
不,有細微的差別,你不能說沒有差別
除了語法之外沒有別的區別。
雖然只有一個簡短的句子,但這仍然是一個有效的答案。
以及一個非常精確、準確和相關的答案。
它只是對on條件進行過濾,而不是添加一個where過濾器。所做的沒有區別,只是沒有一個地方比較慢。他的回答完全足夠了
以這種方式考慮,在聯接時,表中的行與其他表中的行在兩個條件下(經過它兩次)進行比較…而不是在連接后進行一次,然后查找非空結果。這就是為什么它更快
這不是一個正確的答案(盡管這是常見的誤解)。通常,這兩個命令之間沒有明顯的區別,因為查詢優化器將重寫查詢以使用更好的語法。但是,這兩個查詢的運行順序有著根本的區別。FROM子句在WHERE之前進行評估,并在更復雜的查詢中給出截然不同的執行計劃。要驗證,請使用提示忽略優化器的更改,并使用解釋計劃查看執行路徑的差異。
這很有趣-謝謝你指出這一點。如果我錯了,請糾正我,只是再次回顧查詢,我認為即使是結果也會與上述兩個查詢完全不同。查詢1不會返回a.name為空的記錄。查詢2將返回a.name為空的記錄,因為表a位于聯接的左側。如果我們從表B中選擇一列,我們會看到結果顯示為空,即使我們在ID上匹配。
執行聯接,然后執行篩選器
在聯接前執行篩選器(更好的性能)
編輯:上面是我的原始答案,下面支持它。
4個表,4個左聯接,大約500000個結果,第二個查詢在一半時間內運行。在測試查詢效率時,您應該選擇更大的工作集…或是CPU負載、RAM使用、連接時間等因素。如果您的記錄少于1000條,或者流量優化有限,則很難看到或證明這一點。在生產環境中測試您的工作集并使用性能更好的東西(不僅僅是理論上的)很簡單。
網址:http://www.beaudurant.com/images/sof/22302649.jpg
您可以看到我的數據集在效率和結果上的差異。此示例使用的是MySQL數據庫。
452734記錄420.016秒
452747記錄在214.334秒內
注意:查詢是故意運行緩慢的。
我可以在4+表(內部)聯接上發布10000000條記錄的示例…在我的例子中,添加和到每個聯接會更快,然后等待直到最后以一個where結束。快30秒以上…
表達式的語法外觀與實際用于計算結果的策略無關。從未聽說過"查詢優化器"這個詞?
你們中有人愿意看我的結果嗎?您使用大型數據集嗎?
歐文-你錯了……句法外觀與查詢策略有關。優化器只知道如何編寫比您更好的查詢(基于對數據和元數據的復雜分析),因此更改執行計劃以編寫您的意思而不是編寫的內容。這就是執行計劃隨著表中數據的變化而隨時間變化的原因。但是,編寫查詢的順序會影響優化器的編譯。
歐文-是女士嗎?我主要使用MySQL、Berkeley、SQLite和MSSQL。這個例子是mysql,盡管我可以在mssql上顯示相同的結果(不同的表和數據)。我喜歡做事情,而不是讓微軟為我做決定。
總結
以上是生活随笔為你收集整理的mysql and 和where,关于mysql:连接sql查询中where和and子句的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雪莲冰块5毛一包的定价13年没涨!利润只
- 下一篇: centos mysql 5.6 源码_