【发布时间】:2018-07-26 19:31:43
【问题描述】:
我有一个接受表变量参数的存储过程。表变量只有一列,用于传入要查询的主键列表。
表变量定义为:
CREATE TYPE PrimaryKeyList AS TABLE
(
PrimaryKey INT NOT NULL
)
存储过程定义类似于:
CREATE PROCEDURE MyStoredProc
@idList AS PrimaryKeyList READONLY
AS
BEGIN
SELECT id, col1, col2
FROM myTable mt
JOIN @idList ids ON ids.PrimaryKey = mt.id
END
表myTable 有几百万行,存储过程将遇到不同长度的PrimaryKeyLists(介于1 到大约10,000 之间)。
如何优化表变量结构和存储过程?
向PrimaryKeyList 添加聚集索引是否有意义?它将在其他地方重复用于相同的目的。
PrimaryKeyList 表变量在 C# 中生成为 System.Data.DataTable 对象,并使用 ADO 调用存储过程。
索引和非索引PrimaryKeyList 表变量的性能有何不同?
有更好的方法吗?
【问题讨论】:
-
TABLE变量可以变形为临时表。你可以这样创建索引:DECLARE @x TABLE (id int, INDEX IX_id CLUSTERED(id));
标签: sql sql-server database stored-procedures