簡體   English   中英

MySQL為什么不優化此簡單查詢並提供緩存結果?

[英]Why does MySQL not optimise this simple query and provide the result from cache?

查詢:

select count(a_column) from a_table where (0=0) ;

當我在MySQL提示符下執行此查詢時,花了大約0.90秒來提供表中的行數。 當我重復相同的查詢時,始終0.00秒內得到結果。 這意味着結果是針對此查詢緩存的。

現在,我將條件更改為where (1=1) ,執行時間0.65秒 當我重復此新查詢時,始終0.00秒內得到結果。 這再次表明結果是針對此新查詢緩存的。

where子句是不必要的,可以刪除。 如果將結果針對此優化查詢進行緩存,則即使我where (N=N)更改N,也只有第一次執行應該花費更多的時間,並且每次重復都應該在0.00秒內得到結果。沒有對此進行優化。

MySQL是否優化此類查詢? 我的小型實驗有什么解釋?

我在CentOS 5.2上使用的是MySQL 5.0.77,它可能很舊,並且這個問題在較新的發行版中可能不存在,但我更想知道原因。

手冊中記錄了此行為。

引用手冊:

在解析之前,將傳入的查詢與查詢緩存中的查詢進行比較,因此以下兩個查詢被查詢緩存視為不同:

  • 選擇* FROM tbl_name
  • 選擇* from tbl_name

查詢必須完全相同(逐字節),才能被視為相同。 此外,由於其他原因,相同的查詢字符串可能會被視為不同的查詢字符串。 使用不同數據庫,不同協議版本或不同默認字符集的查詢被視為不同查詢,並分別進行緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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