我需要一个用于存储键/值对的表(如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条记录中,我已经看到了性能问题。
答案 0 :(得分:2)
您可以引入一个附加列,该列是键名的哈希值;例如“/ USER / REX / AUTO_LOGIN”可能会散列到102454.然后,您可以在散列列上添加索引(或散列列和键名列上的复合索引),并将其包含在任何查询的where子句中; e.g
SELECT DATA
FROM REG
WHERE HASH = 102454 and ID = '/USER/REX/AUTO_LOGIN'
在int
列上搜索应该比查询varchar
ID
列更有效,并且应该具有缩小到具有相同哈希值的几行的效果,然后将检查其是否匹配ID
值。
答案 1 :(得分: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);