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
    • 最新
    • 标签
主页 / user-70834

Dirk Boer's questions

Martin Hope
Dirk Boer
Asked: 2024-02-29 07:16:01 +0800 CST

为什么唯一键上不允许忽略重复键?

  • 5

如果我正确理解这个Index答案,则with Is Unqiueon 和 a之间的区别Unique Key主要是表面上的。

在 MSSQL 界面中,当我切换到唯一键时,该键Ignore Duplicate Keys被禁用。

我理解有问题吗?我想Ignore Duplicate Keys在这种情况下使用。Index当我执行 an withIs Unique与 a时,会产生什么后果Unique Key?

输入(启用下拉菜单)Index:Is Unique

IsUnique 打开的索引

类型Unique Key(禁用下拉菜单):

独特的钥匙

index
  • 1 个回答
  • 35 Views
Martin Hope
Dirk Boer
Asked: 2023-11-01 22:09:19 +0800 CST

返回数据时,SQL 实现(或至少 SQL Azure)是否会通过联接跳过明显的重复数据?

  • 6

假设我有:

  • 非常宽的表 A,我需要所有列
  • 我需要加入一个有很多行的小表 B。

当然,当我连接这两个表时,我会返回 B 的每一行的 A 的所有内容。

这是内部被优化掉还是所有这些数据都是通过网络发送的?

因为如果这是最后一件事,在这种非常特殊的情况下,我只需很少的努力就可以在内存中手动连接。

例子:

SELECT ColumnA1, ColumnA2, ColumnA3, ColumnB1 
FROM TableA 
JOIN TableB ON TableB.Id = TableA.TableBId

得出数据:

ColumnA1    ColumnA2    ColumnA3        ColumnB1 
------------------------------------------------
LargeTextA  LargeTextB  LargeTextC      1
LargeTextA  LargeTextB  LargeTextC      2
LargeTextA  LargeTextB  LargeTextC      3
LargeTextA  LargeTextB  LargeTextC      [1.000.000 times more]

LargeTextA、LargeTextB 和 LargeTextC 是否会通过线路传输 1.000.000 次,还是只发送一次,因为它知道这只是重复的数据?

sql-server
  • 1 个回答
  • 60 Views
Martin Hope
Dirk Boer
Asked: 2021-10-15 14:43:10 +0800 CST

两种反模式之间的选择:过度设计与过度优化

  • 0

有时我需要保持状态,例如 IsVerified 标志。

有两种选择:

布尔值(或位)

优势:最小最快

...但在理论上“过度优化”,因此是一个糟糕的论点。

可为空的日期时间

IsVerifiedOn -> NULL 未验证,任何值都表示已验证。

优点:您将来可能会遇到一种情况,您会突然遇到一个有用的情况,即您实际上知道该帐户何时已通过验证。

...但理论上“过度设计”(你不需要它),你应该只在你真正需要它的时候添加它。

那么在这两种邪恶之间呢?什么是最好的开始?

database-design performance
  • 2 个回答
  • 63 Views
Martin Hope
Dirk Boer
Asked: 2021-04-10 19:57:27 +0800 CST

为什么不能向 SQL Server 中的现有列添加标识?

  • 1

身份列有什么特别之处?

我很确定有一个正当的理由,但我试图更好地理解 SQL。

那么,一个身份列有什么特别之处,以至于回想起来不能轻易添加呢?

为什么每次插入新行时,这不仅仅是一个单一的 int/bigint 标志?

每行是否有任何物理存储的东西,这是一个困难的过程?

sql-server alter-table
  • 5 个回答
  • 466 Views
Martin Hope
Dirk Boer
Asked: 2021-01-30 03:11:43 +0800 CST

由于 SQL Server 中没有 unsigned int,对于大型表来说,-2,147,483,648 的标识种子不是更有意义吗?

  • 8

我刚刚想到默认的身份种子是 1。我有一些表,我知道它们会在某个时候增长到数十亿。int.Min对于这些表,从 (-2,147,483,648)开始不是更有意义吗?

这可能会让您bigint在 4 年或 8 年内迁移您的密钥。可以足够相关。

这很常见吗?感觉很奇怪。有什么我想念的吗?

sql-server identity
  • 2 个回答
  • 1367 Views
Martin Hope
Dirk Boer
Asked: 2021-01-27 09:13:37 +0800 CST

通过对包含列的索引进行大量更新来节省性能

  • 2
Points
------------------
PK  QuestionId  int (+30.000.000 distinct values)
PK  EventId     int (large batches where 80.000 rows have the same EventId)
    Value       smallint

该表大约有 4000 万行,并且存在性能问题。

主要有两个查询:

在QuestionId上:

  • 大约 3000 万个不同QuestionId的值(变化很大)
  • 繁忙时间有很多查询(每分钟数千次)

在EventId上:

  • 将有 +150.000 行的批量更新where EventId=X来设置Value=NULL在非常忙碌的时刻。

所以我首先想到的要获得最佳性能是我制作EventId,QuestionId了ClusteredIndex,以便批量更新可以轻松找到所有靠近彼此的EventId并直接更新值。

我的第二个想法是添加一个包含QuestionId和包含列 Value的索引,以便它可以直接从索引中读取值(EventId在这种情况下无关紧要)。

但后来我想:聚集索引是否重要?由于索引中的包含列值也需要在批量更新期间进行更新。

  • 虽然不牺牲查询性能 - 是否可以快速(几秒钟)获得批量更新,或者我是否必须接受这个过程在不升级硬件的情况下总是很慢。
  • 任何其他想法设置 ClusteredIndex / 索引的最佳方法是什么?

我知道理论上我应该测试一切并衡量它,但该网站是活跃的并且被大量使用。

我是一名独立开发人员,我没有资源聘请某人。任何估计的猜测和想法都会非常有帮助,因为这已经给了我正确的方向!

sql-server performance
  • 1 个回答
  • 494 Views
Martin Hope
Dirk Boer
Asked: 2020-12-30 01:47:25 +0800 CST

聚集索引碎片与包含列碎片的索引

  • 7

我有一个相对较大的表(对我来说),有 4000 万行,预计在两周内(在活动期间)将增长到 80 到 1.2 亿行。

Tip
--------------
Id          int (clustered index)
UserId      int
TipIndex    smallint
Value       binary(8)
LastChanged datetime2(3)
  • 每个用户都有 1 到 400 个提示,这些提示将在此期间随机插入
  • UserId + TipIndex 是唯一的
  • 我从不直接在身份密钥 (Id) 上查询提示
  • 99% 的时间我都在 UserId 上查询
  • 我需要所有列
  • 我经常查询 1 个 UserId(每个页面视图),有时会查询 10.000 个批次的统计信息
  • 在此期间这是一个高流量站点,它应该能够每分钟处理 30.000 次关于 UserId 的查询
  • Id 目前是我的聚集索引,因为我读到它导致碎片最少。

所以我在 SQL Azure 上托管,Azure 已经建议添加包含列的索引。我一直对使用 UserId,TipIndex 作为聚集索引犹豫不决,因为提示会随机添加。这意味着我害怕巨大的碎片问题等。

我的问题:

  • 包含列的索引没有完全相同的问题吗?
  • 包含列的表是否与具有相同碎片问题的“影子表”不同?
  • 我是否应该迁移以使用 UserId、TipIndex 作为 ClusteredIndex 而不是 Id?
  • 如何防止碎片化?

我知道最终答案总是“取决于”或者我应该衡量它。但由于我是一个单独的开发人员,没有很多资源,我希望有更多经验的人对此有直觉,所以我的第一次尝试更有可能朝着正确的方向前进。

sql-server performance
  • 2 个回答
  • 297 Views

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