问题描述
你好
我需要你的帮助,我不知道该怎么做,我在这个领域是个新手,如果你能帮忙,我真的会很高兴。
这是...
假设以下查询需要很长时间才能运行。
登录表有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” 之间转换 (登录.月.日 | | “/” | | 登录.年为日期)
我需要你的帮助,我不知道该怎么做,我在这个领域是个新手,如果你能帮忙,我真的会很高兴。
这是...
假设以下查询需要很长时间才能运行。
登录表有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列。
无论如何... 试试这个
但是请放心,以各种方式将日期存储在3列中将是一场噩梦。
您可能会通过创建虚拟列获得一些好处,例如
alter table登录添加a_real_date生成始终为 (to_date(logins.mo nth | | '/' | | logins.day | | '/' | | logins.year,'mm/dd/yyy'))
然后索引 “a_real_date” 并使用该列编写查询
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




