我有一个1000x1000的矩阵,每个条目中都有一些数据。
是否可以将其顺序存储在表中(即,前一行的下一行)?我的意思是,如果我可以“通过偏移量”(就像一个数组)访问这个表,假设我不会添加/删除任何条目,我将为键节省空间,这在这里是明显多余的。
有可能吗?谢谢!
发布于 2011-09-23 21:58:39
表没有顺序。它们是没有顺序的。键不是多余的,因为它告诉您如何访问数据。如果我对此进行建模,我会这样做:
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来说,这都是无关紧要的。
发布于 2011-09-23 21:59:41
一百万行是一个相当小的表,所以我的初始假设如下所示:
CREATE TABLE tbl1 (x INT NOT NULL, y INT NOT NULL, ... some data ... , PRIMARY KEY (x,y));https://stackoverflow.com/questions/7529921
复制相似问题