Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:优化DateTime字段上的非敏感选择_Sql_Mysql_Query Optimization_Nosql - Fatal编程技术网

SQL:优化DateTime字段上的非敏感选择

SQL:优化DateTime字段上的非敏感选择,sql,mysql,query-optimization,nosql,Sql,Mysql,Query Optimization,Nosql,我有一个安排某些活动的应用程序。所有这些事件都必须在每个预定时间之后进行审查 因此,基本上我们有3个表: 项目(id、名称) 计划项目(id,item\u id,execute\u at-datetime)-item\u id列具有索引选项 已审核的项目(id,项目id,在-datetime创建)-项目id列具有索引选项 所以,该应用程序的核心功能是“给我任何项目(尚未审查)的实际时刻” 如何优化此解决方案的速度(因为它是非常核心的业务功能,而不是微观优化) 我认为向datetime字段添加

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

因此,基本上我们有3个表:

  • 项目(id、名称)
  • 计划项目
    id
    item\u id
    execute\u at
    -datetime)-item\u id列具有索引选项
  • 已审核的项目
    id
    项目id
    -datetime创建)-项目id列具有索引选项
所以,该应用程序的核心功能是“给我任何项目(尚未审查)的实际时刻”

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

我认为向datetime字段添加索引没有任何意义,因为该字段的基数或唯一性非常高,索引不会提供任何(?)加速。对吗

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

--

我在有意义的地方使用缓存(memcached


已更新。

我想您确实想要预定的项目,但在预定之后不需要审查

审查是否应该与计划项目相连接,而不是直接与项目相连接?现在,您必须比较日期,以查看哪些评论在一个预定项目之后,而在下一个项目之前。此外,如果一个项目安排了两次,间隔时间很短,那么您可能会得到属于第二次安排的两次审阅

通过此更改,您可以轻松选择未查看的日程安排:

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创建索引,当然它的基数可能最高。

您使用哪种缓存,memcached还是反向代理?高基数意味着数据具有很强的选择性,索引肯定会有所帮助。它是低基数列,不会被使用。感谢哥兰提供了一个有趣的答案!
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