![](/img/trans.png)
[英]Nodejs loops iterating before executing the mysql queries embedded inside them
[英]Does MySql analyze / optimize queries before executing them?
如果您要編寫這樣的查詢:
SELECT * FROM `posts` WHERE `views` > 200 OR `views` > 100
MySql 會分析該查詢並意識到它實際上等同於這個嗎?
SELECT * FROM `posts` WHERE `views` > 100
換句話說,MySql 會優化查詢以跳過任何不必要的WHERE
檢查嗎?
我之所以問,是因為我正在編寫一段代碼,該代碼目前會生成帶有冗余WHERE
子句的查詢。 我想知道在將它們發送到 MySql之前是否應該優化這些查詢,或者是否沒有必要,因為 MySql 無論如何都會這樣做。
是的。 MySQL 在運行查詢之前會對其進行優化。 實際上,什么運行與 SQL 語句本身沒有明顯的關系——它是一個有向無環圖。
在此過程中,MySQL 確定用於查詢的索引、連接算法、對列表中in
常量列表進行排序等等。 對於 Stack Overflow 的答案來說,優化的主題太長了。
優化器還對查詢進行了一些簡化。 我不確定這些簡化是否延伸到不平等。 但是,進行兩次比較幾乎沒有開銷。
EXPLAIN SELECT...
顯示查詢是如何重寫的——但它仍然有 OR。
“優化器跟蹤”也說了同樣的話。 但是,當它開始討論“成本”時,它會變得聰明並合並兩個比較。 (這種情況至少可以追溯到 5.6。)
在許多情況下,應該像 covid 一樣避免使用OR
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.