在多列主键的第一个字段上添加单独的单列索引是否多余?与表的大小相比,它是否取决于第一列中唯一值的相对数量?
我的具体情况是,我正在构建几个具有两列和三列主键的中等大小的表(20k - 500k 行)。这些表中的第一列是一个整数,对应于某个业务活动(在这里我将其称为“活动”),第二列是产品 ID(实际上是 UPC)或业务位置标识符:
-- Activity - upc table: entire table is a two-column primary key
CREATE TABLE activity_upc (
activity_id int NOT NULL,
upc_id dec(18,0) NOT NULL,
CONSTRAINT PRIMARY KEY PK_activity_upc CLUSTERED ( activity_id, upc_id )
)
-- One of several transaction tables, unique by activity, location, and date
-- (date in SQL server is a 3-byte integer)
CREATE TABLE activity_stuff (
activity_id int NOT NULL,
location_id smallint NOT NULL,
transaction_date date NOT NULL,
[ other columns ],
CONSTRAINT PRIMARY KEY PK_activity_stuff CLUSTERED (
activity_id, location_id, transaction_date )
)
有数百个唯一位置 ID、数千个唯一活动 ID 和超过一百万个唯一 UPC。我在 上有一个索引,location_id
因为它非常频繁地通过location_id
. 在activity_id上添加一个单独的索引是否有帮助,或者是愚蠢和多余的,它也经常用作单列过滤器?