SQL Server:是否可以创建计算索引

Man*_*ngo 4 index sql-server

在 SQL Server 中,是否可以在计算上创建索引?

以下并没有为我工作:

CREATE INDEX customermonth ON customers(month(dob));
Run Code Online (Sandbox Code Playgroud)

一些数据库允许我这样做。在 SQL Server 中执行此操作有技巧吗?

men*_*osi 10

是的,可以这样做,但不能使用您使用的语法。关键是你需要在表中创建一个计算列,然后索引:

ALTER TABLE customers ADD MonthOfBirth AS MONTH(dob) PERSISTED;
CREATE INDEX customermonth ON customers (MonthOfBirth);
Run Code Online (Sandbox Code Playgroud)

计算列是SQL Server的名字,在其他产品调用生成列,并在地方STORED(参见VIRTUAL),我们使用PERSISTED

请参阅Atif Shehzad 撰写的如何在 SQL Server 中计算列上创建索引

自然,这要求您有更改表架构的权限,并且您需要确保添加列不会产生任何令人讨厌的副作用(例如破坏使用 的报告SELECT * FROM customers;

PERSISTED在为它们创建索引之前,计算列并不总是必须存在。请参阅有关该主题文档

  • 我通常坚持计算列,因为存储很便宜,但 CPU 和 RAM 是一种宝贵的商品。 (2认同)