Ken*_*her 5 index sql-server temporary-tables
我有一个看起来像这样的存储过程:
SELECT columnlist
INTO #temptable
FROM Table
JOIN lotsofothertables
WHERE severalconditions
UPDATE anothertable
SET column = #temptable.column
FROM anothertable
JOIN #temptable
ON anothertable.PKColumn = #temptable.PKColumn
Run Code Online (Sandbox Code Playgroud)
初始查询通常只生成几列 (<100),因此更新速度很快。但是偶尔(这些是我们遇到问题的运行)它会产生 1000 甚至 10,000 次。在它们之间添加这样的东西是否合理?
IF @@RowCount > 100
CREATE INDEX ix_temp ON #temptable(PKColumn)
Run Code Online (Sandbox Code Playgroud)
或者我最好只在表上创建索引,因为行很少,创建索引所花费的时间会相当少?
这是有些主观,但我不是在所有的风扇SELECT ... INTO
无论如何,通常有一个明确的更换CREATE TABLE
,并INSERT ... SELECT
为数据类型,列名,和为空然后可以更明确地看到(并且既可以最小日志记录)。
在这种情况下,如果您要在前面的列上创建带有未命名主键约束的临时表
CREATE TABLE #temptable
(
PKColumn INT PRIMARY KEY
)
Run Code Online (Sandbox Code Playgroud)
而不是创建表并在之后添加索引,您将能够从临时表对象缓存中受益(至少可能因为确实存在一些问题)。
我不会费心让它以行数为条件,除非您已经证明存在很少行的索引会以某种方式显着降低性能(不太可能)。
归档时间: |
|
查看次数: |
464 次 |
最近记录: |