暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 我需要你帮忙处理这个问题!紧急。

ASKTOM 2019-02-23
338

问题描述

你好

我需要你的帮助,我不知道该怎么做,我在这个领域是个新手,如果你能帮忙,我真的会很高兴。

这是...

假设以下查询需要很长时间才能运行。
登录表有1000万条记录,并且有一个关于月、日、年的索引。可以做些什么来加快查询速度?

选择
cast(logins.mo nth | | '/' | | logins.day | | '/' | | logins.year as date) 为loginDt,
登录。人
从登录
左加入分钟午餐。人 = 登录。人
和MIN_LUNCH.date = cast(logins.mo nth | | '/' | | logins.day | '/' | | logins.year as date)
哪里
在 “01/01/2010” 和 “03/01/2010” 之间转换 (登录.月.日 | | “/” | | 登录.年为日期)

专家解答

1...不用喊了

2... 日期应存储为 * Dates * 而不是3列。

无论如何... 试试这个

SELECT                  
to_date(logins.month || '/' || logins.day || '/' || logins.year,'mm/dd/yyyy') as loginDt,
logins.person     
FROM logins       
LEFT JOIN MIN_LUNCH ON MIN_LUNCH.person = logins.person 
AND MIN_LUNCH.date = to_date(logins.month || '/' || logins.day || '/' || logins.year,'mm/dd/yyyy')
WHERE logins.month between 1 and 3
and   logins.day = 1
and   logins.year = 2010


但是请放心,以各种方式将日期存储在3列中将是一场噩梦。

您可能会通过创建虚拟列获得一些好处,例如

alter table登录添加a_real_date生成始终为 (to_date(logins.mo nth | | '/' | | logins.day | | '/' | | logins.year,'mm/dd/yyy'))

然后索引 “a_real_date” 并使用该列编写查询
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论