Sql 按偏移量(?)访问表
我有一个1000x1000矩阵,每个条目中都有一些数据 是否可以在表中按顺序存储它(即,前一行旁边的一行)?我的意思是,如果我可以“按偏移量”(就像一个数组)访问表,因为我不会添加/删除任何条目,我会为键节省空间,这显然是多余的Sql 按偏移量(?)访问表,sql,database,Sql,Database,我有一个1000x1000矩阵,每个条目中都有一些数据 是否可以在表中按顺序存储它(即,前一行旁边的一行)?我的意思是,如果我可以“按偏移量”(就像一个数组)访问表,因为我不会添加/删除任何条目,我会为键节省空间,这显然是多余的 可能吗?谢谢 表没有顺序。它们没有顺序。密钥不是多余的,因为它告诉您如何访问数据。如果我要为此建模,我会这样做: CREATE TABLE My_Matrix AS ( row_num SMALLINT NOT NULL, col_num
可能吗?谢谢 表没有顺序。它们没有顺序。密钥不是多余的,因为它告诉您如何访问数据。如果我要为此建模,我会这样做:
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来说,这都是非常不相关的。一百万行是一个相当小的表,因此我的初始假设如下所示:
CREATE TABLE tbl1 (x INT NOT NULL, y INT NOT NULL, ... some data ... , PRIMARY KEY (x,y));
什么是RDBMS?矩阵元素的数据类型是什么?它们是固定长度的吗?我计划使用SQLite。元素由固定长度的结构组成。