我有1000x1000矩阵,每个条目都有一些数据。
是否可以在表格中按顺序存储它(即前一个旁边的一行)?我的意思是,如果我可以“通过偏移”访问表(就像数组一样),给定我不会添加/删除任何条目,我会为密钥节省空间,这在这里显然是多余的。
有可能吗?谢谢!
答案 0 :(得分:0)
表格没有订单。它们没有顺序。密钥不是多余的,因为它告诉您如何访问数据。如果我要对此进行建模,我会这样做:
CREATE TABLE My_Matrix AS (
row_num SMALLINT NOT NULL,
col_num SMALLINT NOT NULL,
value INT NOT NULL, -- Or whatever data type is appropriate
CONSTRAINT PK_My_Matrix PRIMARY KEY CLUSTERED (row_num, col_num),
CONSTRAINT My_Matrix_row_num_chk CHECK (row_num BETWEEN 1 AND 1000),
CONSTRAINT My_Matrix_col_num_chk CHECK (col_num BETWEEN 1 AND 1000)
)
现在,如果您想按行号和列号获取值,那么您可以快速获得:
SELECT value FROM My_Matrix WHERE row_num = @row_num AND col_num = @col_num
如果你想通过偏移来获得它,那么你可以使用类似的东西:
SELECT
value
FROM
My_Matrix
WHERE
row_num = @value%1000 AND
col_num = @value/1000
至于保存存储,你在这里谈论每行4个字节,矩阵最多有1M行。对于任何非常不相关的严重RDBMS。
答案 1 :(得分:0)
一百万行是一个相当小的表,所以我的开始假设如下:
CREATE TABLE tbl1 (x INT NOT NULL, y INT NOT NULL, ... some data ... , PRIMARY KEY (x,y));