【问题标题】:SELECT * INTO #testtable query takes quite a bit of time?SELECT * INTO #testtable 查询需要相当长的时间?
【发布时间】:2015-11-13 04:54:53
【问题描述】:
select TableA.Sys_ID, TableA.State_Code, 
    TableA.Zip_Code, TableA.Birth_Date, TableA.Gender, 
    TableA.Source_code, TableB.Sys_ID
into #testtable
from DM.TableA
    inner join DM.TableB
    on TableA.Sys_ID = TableB.Sys_ID;

TableA 有大约 1.3 亿条记录,而 TableB 有大约 6 亿条记录。我在 15 分钟后多次中止查询,因为我不想阻塞整个公司对数据库的访问。我可以做些什么来优化我的代码以提高加载速度,还是完成工作只是时间问题?

【问题讨论】:

  • 表上有索引吗?在Sys_ID
  • 是的。 TableA 上有 85 个,TableB 上有 24 个。这对运行速度有何影响?
  • 对于 150 万和 6 亿的表连接来说,15 分钟或多一点似乎是正常的,尽管它没有太多列,但要处理的仍然很多。索引对于性能非常重要,特别是如果您要连接如此大的表,重要的是要知道对您认为使用它可能很聪明的每一列使用哪种索引类型。我不明白你为什么担心阻塞访问,你正在提交,在 IQ 中你总是可以进行选择,不管有多少人在同一张表上做一个选择语句,你只是从表中读取,你没有锁定它。

标签: sql select sybase sap-iq select-into


【解决方案1】:

请您执行以下一次以检查是否有帮助。

select TableA.Sys_ID, TableA.State_Code, 
TableA.Zip_Code, TableA.Birth_Date, TableA.Gender, 
TableA.Source_code, TableB.Sys_ID
into #testtable
from DM.TableA
inner join DM.TableB
on TableA.Sys_ID = TableB.Sys_ID where 1=2;


insert into  #testtable select TableA.Sys_ID, TableA.State_Code, 
TableA.Zip_Code, TableA.Birth_Date, TableA.Gender, 
TableA.Source_code, TableB.Sys_ID from DM.TableA
inner join DM.TableB on TableA.Sys_ID = TableB.Sys_ID  order by            
TableA.Sys_ID

您可以使用 MDA 表 (monOpenobjectActivity) 监控记录插入临时表的情况,以查看在多长时间内插入了多少记录。

虽然 Select into 比 insert 快。但是您可以尝试此选项一次。

替代尝试:

select TableA.Sys_ID, TableA.State_Code, 
TableA.Zip_Code, TableA.Birth_Date, TableA.Gender, 
TableA.Source_code, TableB.Sys_ID
into #testtable
from DM.TableA
inner join DM.TableB
on TableA.Sys_ID = TableB.Sys_ID order by TableA.Sys_ID

【讨论】:

    【解决方案2】:

    其中一个表至少需要 Sys_ID 上的索引。 如果有,那么统计数据是最新的吗? 更新指数统计 如果不。 您可以通过以下方式了解统计信息:

    SELECT DATACHANGE(tab_name, null, null)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多