gpt4 book ai didi

database - 我应该在用户定义的表类型上有一个主键吗?

转载 作者:太空狗 更新时间:2023-10-30 01:52:54 24 4
gpt4 key购买 nike

首先,我了解主键在 SQL 表或与此相关的任何数据库中的作用。

但是,当涉及到自定义表类型时,我发现自己无法理解为什么要创建主键。根据我的经验,我发现它们没有性能优势,但我怀疑我的发现可能来 self 对它们的一般使用和有限的经验,而不是更有经验的观点。

例如,我通常将表值参数用于插入/更新过程,或者传递用于创建选择查询的值数组。我没有发现它们对性能有任何好处,如果有的话,我也遇到过小的性能下降(但我们说的最多是 10 毫秒,所以可以忽略不计)。

我应该透露,在其中传递的任何数据都已经非常小心地清理/排序,因此我可能看不到由此带来的好处,但我无法轻易知道。

因此,问题又来了,我应该在我的用户定义表类型上有一个主键,还是它不那么重要?

如果这是重复的,我们深表歉意。我进行了大量搜索,但我可能使用了错误的关键字组合。

我们将一如既往地感谢您的见解。

最佳答案

其实我也很好奇同样的事情,只是角度不同...

我们有一个动态查询,该查询是根据用户输入组合在一起的,结果是这样的查询

"SELECT A.* 
FROM A
<some joins, etc>
WHERE A.ID IN ('" + String.Join("','", List<UserInputs>) + "')"

我想用 tvp 关闭 sql 注入(inject)孔,但查询性能完全下降(慢了几个数量级)。

文字计划开始于对 id 列进行漂亮、干净的索引扫描,而且速度非常快。

TVP 的计划在进入选择性部分之前与 tvp 的连接和整个表的具体化进行了各种复杂的处理。

我想知道在 tvp 类型上放置一个主键是否可以让优化器生成更好的计划。

关于database - 我应该在用户定义的表类型上有一个主键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com