【问题标题】:Should I create primary key on a temporary table in a stored procedure?我应该在存储过程中的临时表上创建主键吗?
【发布时间】:2017-02-27 17:55:05
【问题描述】:

我有一个存储过程,需要动态创建 3 个临时表并将它们加入到包含其他表的大型查询中。

这样做是个好习惯吗?

【问题讨论】:

    标签: sql-server database stored-procedures


    【解决方案1】:

    这实际上取决于,这不是一个好或坏的做法。如果是关于性能,你实际上并不需要 PK,你需要的是一个聚集索引(在创建 PK 时默认在 SQL Server 上创建)。在任何情况下,重要的是,如果要批量插入临时表,首先加载表,然后创建索引。如果您创建索引然后插入数据,则索引可能会出现碎片。

    就个人而言,我会监控有无索引的过程并选择最佳选项。有时,创建索引比执行表扫描需要更多时间。但是,如果表很大,那么创建索引然后执行您需要执行的任何转换实际上可能会好得多。

    【讨论】:

    • 根据我的经验,我只想强调您所说的:加载临时表,然后添加您可能需要的任何索引。在我所做的每一个测试中,这比创建一个带有索引的临时表然后加载数据要快。而且您可以通过查看计划来确定是否需要索引...使用示例数据和“显示实际计划”选项运行该过程,您可以轻松查看问题以及索引是否解决了这些问题。
    • @asemprini87 你是对的,我检查了查询计划,当你添加 pk 时确实会有所不同,这完全取决于你要在临时表中操作多少数据。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2010-09-12
    相关资源
    最近更新 更多