2010-04-24 71 views
0

我有一个用于安排某些事件的应用程序。所有这些事件必须在每个计划的时间后进行审查。SQL:优化日期时间字段上的密集型选择

所以基本上我们有3个表:

  • 项目(ID,姓名)
  • scheduled_itemsiditem_idexecute_at - 日期时间) - ITEM_ID列有索引选项。
  • reviewed_itemsid,item_id,created_at - datetime) - item_id列有一个索引选项。

因此,该应用程序的核心功能是“给我任何项目(尚未审查)的实际时刻”。

我该如何优化此解决方案速度(因为它是非常核心的业务功能而不是微型优化)?

我认为将索引添加到日期时间字段没有任何意义,因为该字段的基数或唯一性非常高,并且索引不会给出任何(?)加速。这是对的吗?

你会推荐什么?我应该尝试不使用SQL吗?

-

mysql -V 
5.075 

我使用缓存(Memcached的),其中它使SENCE。

已更新。

+0

你使用什么类型的缓存,memcached或反向代理? – 2010-04-24 08:56:02

+0

我使用memcached。 – ep3static 2010-04-24 09:00:48

+1

高基数意味着数据非常有选择性,并且索引肯定会有所帮助。它是低基数列,它不会被使用。 – 2010-04-24 09:33:06

回答

1

我想你实际上想要的是计划的项目,但没有审查后的调度?

不应该将评论连接到预定的项目,而不是与项目不一致?现在您必须比较日期,以查看在一个预定项目之后但在下一个预定项目之后出现哪些评论。此外,如果某个项目在两次之间短时间内排定,则最终可能会包含属于第二个排定的两个评价。

随着这一变化,你可以轻松地挑出来的未经审核schedulings:

select i.id, i.name, s.execute_at 
from items i 
inner join scheduled_items s on s.item_id = i.id 
left join reviewed_items r on r.scheduled_items_id = s.id 
where r.id is null 

至于你的问题:

我想,添加索引到 日期时间字段没有任何意义 ,因为该字段上的基数或唯一性 非常高且索引 不会给出任何(?)加速。它是 是否正确?

不,这是不正确的。如果基数很高,则索引可能很有用。默认情况下为表格的唯一ID创建一个索引,这当然可能具有最高的基数。

+0

感谢Göran提供了一个有趣的答案! – ep3static 2010-04-24 10:35:23