2011-11-19 63 views
1

我想看看如果一個特定的散列碼是最新的1000套用於表內MySQL查詢優化,什麼是最有效的技術來實現這一查詢:爲最大值

SELECT a.idsearch 
    FROM searches a 
WHERE a.hashcode = 549716444  
    AND a.idsearch > (SELECT MAX(b.idsearch) - 1000 
         FROM searches b); 

idsearch是auto_increment列並且是PK。

+0

你有什麼保證,有'idsearch'沒有差距? –

+0

我試圖查看是否在最近的1000次搜索中執行了特定的搜索。 – bmancini

+0

這是一個緩存機制,它將搜索結果推送到基於IDsearch%1000分配的1000個緩存表中。我試圖查看某個特定搜索是否仍在緩存表中。 – bmancini

回答

0

使用現有的查詢,但添加了兩個指標,如果他們不這樣做已經存在:

  • 上(idsearch)單列索引
  • 上(haschode,idsearch)多列索引
0

假設a.idsearch是一個自動遞增的主鍵,那麼您可以使用ORDER BYLIMIT

SELECT a.idsearch 
FROM searches a 
WHERE a.hashcode = 549716444 
ORDER BY a.idsearch DESC 
LIMIT 1000; 

這首先會給你最新的idsearch,所以請相應地調整你的代碼。

+0

這將返回散列碼的最新結果。我試圖找出哈希碼是否在最近的X recrods中。 – bmancini

+0

感謝您的澄清。 – hafichuk