[英]Mysql query execution plan has caching?
我到處尋找我的問題,但沒有找到確切的答案。 數據庫:MySQL給出三個數字字段a,b,c和一個日期時間字段d,所有索引單獨索引表包含10密耳。 記錄。
兩個數字n,m
我有一個基本的查詢:
select * where (a=n or b=n) and c IN(m) Order by d DESC
(n可以是任意數字,m可以是1-9之間的任何數字)我也有一個單獨的索引。 我已嘗試過ac和bc的索引,但沒有成功。
在我的開發環境中,我總是得到一個索引合並,這使得查詢速度很快,即使它出於某種原因而不是我真正關心的文件。
但是在生產(不同的服務器 - 相同的模式/數據)上,無論我做什么都不會發生。
我對這個奇怪問題的解決方法是將查詢轉換為以下語句:
從:
select * where (a=n or b=n) and c IN(m) ORDER BY d desc
至:
select * where (a=n or b=n) and c IN(m,'m') ORDER BY d desc
這導致了對生產環境的合並索引查詢,這對我來說意味着在某處有一個執行計划緩存,我無法弄清楚我的生活在哪里清除緩存(如果確實有一個)
我需要知道如何告訴生產環境在第一個語句中正確使用該索引。
作為注釋......出於某種原因,Explain查詢告訴我d是解釋查詢時用於生產的索引。
我需要知道如何告訴生產環境在第一個語句中正確使用該索引。
使用“強制索引”語法。
如果您在開發和生產中粘貼表格和查詢(相應)的CREATE TABLE&EXPLAIN輸出,我們可以將其縮小到幾個方面。 可能還有助於了解每台機器上的RAM。
PS:
在我的開發環境中,我總是得到一個索引合並,這使得查詢速度很快,即使它出於某種原因而不是我真正關心的文件。
按d排序,不在索引中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.