按偏移量访问表(?)

时间:2011-09-23 13:43:03

标签: sql database

我有1000x1000矩阵,每个条目都有一些数据。

是否可以在表格中按顺序存储它(即前一个旁边的一行)?我的意思是,如果我可以“通过偏移”访问表(就像数组一样),给定我不会添加/删除任何条目,我会为密钥节省空间,这在这里显然是多余的。

有可能吗?谢谢!

2 个答案:

答案 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));