簡體   English   中英

MySql 在執行查詢之前是否分析/優化查詢?

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

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