SQL:在DateTime字段上优化不敏感的SELECT

时间:2010-04-24 08:53:15

标签: sql mysql query-optimization nosql

我有一个安排某些事件的应用程序。所有这些活动必须在每个预定时间后进行审核。

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

  • 项目(id,name)
  • scheduled_items iditem_idexecute_at - datetime) - item_id列有一个索引选项。
  • reviews_items iditem_idcreated_at - datetime) - item_id列有一个索引选项。

因此,应用程序的核心功能是“给我任何物品(尚未经过审查)”。

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

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

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

-

mysql -V
5.075

我使用缓存( memcached )来实现它。

更新

1 个答案:

答案 0 :(得分:1)

我认为您实际上想要计划的项目,但在调度后没有进行审核?

评论是否应该与预定的项目相关联,而不是与项目直接相关?现在,您必须比较日期,以查看在一个预定项目之后但在下一个预定项目之前进行的评论。此外,如果某个项目的安排时间很短,两次之间的时间很短,那么您最终可能会得到属于第二个安排的两个评论。

通过此更改,您可以轻松选择未经审核的调度:

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

关于你的问题:

  

我想在中添加索引   datetime字段没有任何意义   因为基数或唯一性   在那些领域非常高和索引   不会给任何(?)加速。是吗   正确的吗?

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