【问题标题】:find and get data in large amount of SQL table在大量 SQL 表中查找和获取数据
【发布时间】:2021-08-02 19:37:59
【问题描述】:

我有一个简单的数据库表,只有 5 列,没有主键,有 70 亿+(7,50,01,771) 数据。是的,你没看错。它有一个簇索引。

数据库表列

集群索引

如果我编写一个简单的选择查询来获取数据,则需要 7-8 分钟才能返回数据。现在,你得到我的下一个问题。我可以应用于此数据库表的技术是什么?以便及时获取数据。

在实际场景中,我使用此表的位置与 2 个具有 WHERE 子句和过滤数据的临时表连接。请在下面找到我的查询以供参考。

SELECT dt.ZipFrom, dt.ZipTo, dt.Total_time, sz.storelocation, sz.AcctShip, sz.Licensee,sz.Entity from #Zips z INNER join DriveTime_ZIPtoZIP dt on zipFrom = z.zip INNER join #storeZips sz on ZipTo = sz.zip order by z.zip desc, total_time asc

谢谢

【问题讨论】:

  • “如果我编写一个简单的选择查询来获取数据” 定义一个“简单”的选择查询。 SELECT SingleColumn FROM YourTable WHERE SomeColumn = 1;?考虑到您没有PK,您是否至少有一些索引?有没有CLUSTERED
  • 是的,我的表中有一个聚集索引。检查我更新的问题。
  • 您的查询是否有 WHERE 子句?将查询添加到您的问题中。
  • 我建议使用列存储索引。并且可能是一个非聚集索引。是时候去谷歌看看微软的文档了。
  • edit 你的问题,@Krunal,不要把这些信息放在 cmets 中。

标签: sql-server query-optimization large-data


【解决方案1】:

您可以根据查询中的where条件进行索引。然而,这是有代价的:存储。

Order by 语句也很重要。如果您必须在查询中使用 order by,您也可以进行相应的索引。

但不要忘记,索引的成本...

【讨论】:

  • 我优化了查询,将执行时间从 8+ 分钟缩短到 3.5 分钟。所做的更改: (1) 将 dbo.在实际餐桌上。这样它就不会遍历整个数据库来搜索该对象类型。 (2) 在 SP 中调用的每个表中使用 (nolock) 设置 (3) 在一个列上创建一个非集群索引仍然,我有几个问题 (1) 我在 where 子句中有一个字符串拆分的 UDF。这会降低查询性能吗?我还应该优化它吗? (2) 查询执行时间是可变的。有时需要 3 分钟、4 分钟、7 分钟。该怎么办?
  • 是的。拆分或函数也是 where 条件缓慢的原因。我认为这是真正的原因。所以,你可以做什么?例如:如果您的dadas是静态的,您可以创建一个列并在where子句中使用您的字符串拆分填充它,并在您的where条件中使用此列,如果您的dadas不是静态的,请再次执行此列并在此列中写入您需要的内容插入和更新时间...之后使用此列,而不是在您的位置使用函数。我希望我能解释一下我的想法……
  • 请与我分享您对此的看法?
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
相关资源
最近更新 更多