我有一个安排某些事件的应用程序。所有这些活动必须在每个预定时间后进行审核。
所以基本上我们有3个表:
id
,item_id
,execute_at
- datetime) - item_id列有一个索引选项。id
,item_id
,created_at
- datetime) - item_id列有一个索引选项。因此,应用程序的核心功能是“给我任何物品(尚未经过审查)”。
如何优化此解决方案以提高速度(因为它是非常核心的业务功能而非微优化)?
我认为在日期时间字段中添加索引没有任何意义,因为该字段的基数或唯一性非常高,索引不会给任何(?)加速。这是对的吗?
你会推荐什么?我应该尝试不使用SQL吗?
-
mysql -V
5.075
我使用缓存( memcached )来实现它。
更新
答案 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创建索引,该索引当然具有最高的基数。