2011-11-19 69 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