【发布时间】:2020-07-31 16:45:40
【问题描述】:
我们希望将其他供应商的数据加载到 SQL Server 2012 上现有应用程序数据库的表中。表结构如下所示,表中预计有 4 亿行。数据加载要在 3 周后才会出现,但在查询表的性能方面存在问题。
SQL Server 有 64GB RAM。
此表只需要 SELECT 查询。数据是静态的,预计不会更改,并且不会对表进行 WRITES。 SELECT 查询总是期望返回 1 个匹配的行。下面是 SELECT 查询的样子:
Select "Data Column 9"
from Table
where "Data Column 1" = AB
and "Data Column 2" = CD
and "Data Column 3" = EF
and "Data Column 4" = A
and "Data Column 5" = B
and "Data Column 6" = 123
and "Data Column 7" = 456
and "Data Column 8" = GH
Column Name Datatype/Length
============ ====================
ID IDENTITY(1,1) PRIMARY KEY
Data Column 1 CHAR Length = (2)
Data Column 2 CHAR Length = (2)
Data Column 3 CHAR Length = (2)
Data Column 4 CHAR Length = (1)
Data Column 5 CHAR Length = (1)
Data Column 6 CHAR Length = (3)
Data Column 7 CHAR Length = (3)
Data Column 8 CHAR Length = (2)
Data Column 9 CHAR Length = (8)
Audit Column 1 CHAR Length = (1)
Audit Column 2 DATETIME
Audit Column 3 VARCHAR Length = (20)
Audit Column 4 DATETIME
专家能否就应该对哪些列编制索引以及如何编制索引提出建议?关于 SELECT 查询是否需要几秒钟或几分钟的任何想法?关于表设置或任何其他设置的任何其他建议?感谢所有反馈。
【问题讨论】:
-
一个选项是将列散列到一个数字(在计算列中),索引计算列(4/8bytes int/bigint)并使用搜索词的散列值执行搜索 +每列(对于任何可能的重复哈希值)--> 索引查找 + 查找(clkey 或 rid)
标签: sql-server database-performance