sql - Oracle SQL CREATE TABLE 耗时太长或无法创建(没有 CREATE TABLE 工作)
问题描述
任何人都可以在这里提供一些意见。
我正在使用这个结构来创建表格,
create table user.sales_fill as
select
a.name
,gender
,a.age
,b.sales
, 1 as logic
from
(select distinct
name, age, gender
from cust_info )a
left join
sales b
on
a.age = b.age
and a.gender = b.gender
;
当我只使用 SELECT 部分时,只需要 7.5 秒即可显示结果。
select
a.name
,gender
,a.age
,b.sales
, 1 as logic
from
(select distinct
name, age, gender
from cust_info
)a
left join
sales b
on
a.age = b.age
and a.gender = b.gender
;
但是如果我在此选择代码之上添加“创建表”。我永远无法创建表。
如果我使用以下创建的表(但不是正确的内容),我有权创建表
create table user.sales_fill as
select
gender
,age
,sales
, 1 as logic
from sales
;
有什么建议吗?谢谢!
解决方案
尝试重写子查询,使其不需要分解内爆行(JOIN ON DISTINCT):
select
*
from
cust_info
join
sales
on
cust_info.age = sales.age
and cust_info.gender = sales.gender
union
select
name,
age,
gender,
null
from
cust_info
where
not exists(
select
*
from
sales
where
sales.age=cust_info.age and
sales.gender=cust_info.gender
)
这样它就不应该让优化器感到困惑。另请注意:create table as
可能会很慢,因为它会复制扫描表中的索引。您可以尝试create view
(这也具有不占用空间并使用更新的表自动更新的优点),或者您可以尝试显式create table
没有索引as...
并且只有 then insert into ... select ...
。
推荐阅读
- asp.net-core - JWT 发行者无效的 Asp.Net Core
- corda - 实现一个模拟银行的 CorDapp
- html - UL - LI 中的 Div 未相互对齐
- multithreading - 当 SEGV 发生在与主线程不同的线程中时缺少核心文件
- android - 将顶部的 alpha 设置为 0%,将底部的 alpha 设置为 70% - Android - Kotlin
- laravel - Laravel cron 没有在给定的时间拍摄
- android - Android Studio 的 Gradle 问题
- c# - 如何在 Visual Studio 2019 中调试 ASP.Net MVC
- apple-news - Apple News 组件中的 Facebook 视频
- objective-c - 无法构建 Objective-C 模块“Firebase”