AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 126431
Accepted
Fastidious
Fastidious
Asked: 2016-01-17 07:22:53 +0800 CST2016-01-17 07:22:53 +0800 CST 2016-01-17 07:22:53 +0800 CST

如何在大型事实表上索引字母数字外键?

  • 772

我有一个字段是一个字母数字字段,理想情况下是一个非唯一标识符的加密字段。它用于以多对多关系关联其他相当大的事实表。我没有此字段的相关维度,因为此 FK 没有其他属性。

示例:Abcdefgh12345

该字段位于一个相当大且不断增长的数据仓库中,其中事实表按时间聚集而不是像这样在键上聚集。

该列VARCHAR(50)仅在 45 到 50 之间变化。必须检查,但我假设排序规则是SQL_Latin1_General_CP1_CI_AS. 出于优化原因,我不使用 FK。全部由 ETL 控制。

碎片化

由于键的类型,很难索引。它的碎片是通过我最近进行的一系列测试来管理的,这些测试显示 75% 的填充因子至少可以通过减少每日增量负载的碎片至少一周直到可能需要完全重建,每周一次就可以了。

表现

随着填充因子从 100% 降低到 75%,插入和读取变得更慢。记录也如预期的那样变大了。任何带有 include 的索引都在很大程度上推动了插入的性能,但当然可以帮助需要它们的查询提高 10 倍。

问题

有没有人有在数据仓库环境中使用字母数字的良好经验?它的处理方式和索引现在很好,但我认为它可能会更好。我正在考虑在 ETL 过程中剥离密钥、形成新维度并添加更易于管理的密钥的想法。

sql-server data-warehouse
  • 1 1 个回答
  • 636 Views

1 个回答

  • Voted
  1. Best Answer
    Solomon Rutzky
    2016-01-17T21:56:01+08:002016-01-17T21:56:01+08:00

    假设您关于VARCHAR(50)使用排序规则的字段的假设是正确的SQL_Latin1_General_CP1_CI_AS,那么您应该考虑更改它存在的每个表中的那些字母数字“代码”字段,以具有排序规则Latin1_General_BIN2。由于该值来自算法,因此任何字母字符的大小写都应该一致,因此您无需担心不区分大小写的搜索。使用二进制排序规则将比非二进制排序规则(不区分大小写甚至区分大小写)执行得更好,因为它不需要处理任何具有文化意识的语言规则。

    此外,由于您已经尝试过FILLFACTOR100 和 75 的设置并查看每种情况的优缺点,因此您应该尝试 90 的设置以查看是否有帮助。

    我会分别尝试每个更改(第一个,然后添加另一个),以便您可以单独测试它们的效果。这样你就知道每个变化的影响有多大。

    我认为通常系统会受益于用 4 字节密钥替换 45 - 50 字节密钥(假设您使用INT,因为这是维度数据,尽管即使是 8 字节BIGINT也会有所改进)。但是,添加一个新的维度表并将其切换VARCHAR(50)为一个INT(或BIGINT)需要同时更改数据模型和代码,而前两个更改仅影响数据模型,而且影响很小。

    • 5

相关问题

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 在数据仓库中实现多对多关系有哪些方法?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve