小编use*_*379的帖子

在实际实践中不使用外键约束。可以吗?

不使用 FK 约束是我公司的不为人知的规则。FK 约束仅在设计 ERD 时使用,在创建表时不使用。

据我的前辈说,在实际操作中,当我们处理紧急问题时,这些都是非常耗时的障碍。他说,当我们需要立即使用 INSERT/UPDATE/DELETE 语句时,约束会阻止这些语句的执行,并且在保持约束的同时编写语句也很耗时。我什至听说许多其他公司也在这样做。

虽然我有点理解这些挣扎,但我不确定这是否是一个好方法,因为它与我对 DB 的理解完全相反。这家公司也是我的第一份工作,所以我不知道其他公司是如何处理的。

实际上,您对此有何看法?这有道理吗?有更好的方法吗?其他公司在这方面的表现如何?

更新:对于韩国公司来说,这似乎是一种很常见的方法。我问了几个在别的公司工作的前辈,他们大多都说都是这样。甚至其中一个人在一家金融公司工作!有趣的...

foreign-key database-design constraint best-practices

17
推荐指数
1
解决办法
2万
查看次数

如何更快地获得最近行的运行总数?

我目前正在设计一个事务表。我意识到需要计算每一行的运行总数,这可能会降低性能。所以我创建了一个包含 100 万行的表用于测试。

CREATE TABLE [dbo].[Table_1](
    [seq] [int] IDENTITY(1,1) NOT NULL,
    [value] [bigint] NOT NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [seq] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

我试图获取最近的 10 行及其运行总数,但花了大约 10 秒。

--1st attempt
SELECT TOP 10 seq
    ,value
    ,sum(value) OVER (ORDER BY seq) total
FROM Table_1
ORDER BY seq DESC

--(10 rows affected)
--Table 'Worktable'. Scan count 1000001, logical reads 8461526, …
Run Code Online (Sandbox Code Playgroud)

performance database-design sql-server t-sql execution-plan query-performance

8
推荐指数
2
解决办法
474
查看次数

IN 子句 - 列表值和查询之间的性能差异

我改变了这个查询

SELECT ...
FROM linkedServer.DB.Schema.Table1 t1
LEFT JOIN linkedServer.DB.Schema.Table2 t2 ON t1.ORDER_ID = t2.ORDER_ID
WHERE t1.BRANCH_ID NOT IN (
        '009991', '009992', '009993', '009994', '009995', '009996', '009999', '900001', 
        '900002', '900003', '900004', '900005', '900006', '900007', '900008', '999991', 
        '999992', '999993', '999994', '999995'
        )
GROUP BY ...
Run Code Online (Sandbox Code Playgroud)

进入这个

SELECT ...
FROM linkedServer.DB.Schema.Table1 t1
LEFT JOIN linkedServer.DB.Schema.Table2 t2 ON t1.ORDER_ID = t2.ORDER_ID
WHERE t1.BRANCH_ID NOT IN (
        SELECT b.BRANCH_ID
        FROM TB_BRANCH b --25 rows in total
        WHERE b.START_DT = '99999999' --the result of this sub-query …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization execution-plan

3
推荐指数
1
解决办法
2036
查看次数