0

我需要一个用于存储键/值对的表(如 Windows 注册表)。这是我所拥有的:

CREATE TABLE REG         
(                       
    ID VARCHAR(255) NOT NULL,
    DATA VARCHAR(1024),  
    PRIMARY KEY(ID)          
);                       

我正在使用 SQL Server 2008 R2、2008 和 2005。

任何人都可以提供更有效的存储键/值对的想法。

我正在存储这样的密钥:

/USER/REX/AUTO_LOGIN = "T"

/USER/REX/MESSAGE/1 = "这是一条较长的消息"

在大约 10000 条记录中,我已经看到了性能问题。

4

2 回答 2

2

您可以引入一个附加列,它是键名的哈希;例如,“/USER/REX/AUTO_LOGIN”可能散列为 102454。然后您可以在散列列上添加索引(或在散列列和键名列上添加复合索引)并将其包含在任何查询的 where 子句中;例如

SELECT DATA
FROM REG
WHERE HASH = 102454 and ID = '/USER/REX/AUTO_LOGIN'

在列上搜索int应该比查询varchar ID列更有效,并且应该具有缩小到具有相同哈希值的几行的效果,然后将检查匹配ID值。

于 2012-04-27T16:33:26.107 回答
1

我会避免使用varchar(255)作为我的主键,而是选择唯一索引:

CREATE TABLE REG (
    id bigint identity not null,
    key VARCHAR(256) NOT NULL,
    DATA VARCHAR(1024),
    PRIMARY KEY(ID)
);

create unique index reg_key on REG(key);
于 2012-04-27T16:34:29.010 回答