Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按偏移量(?)访问表_Sql_Database - Fatal编程技术网

Sql 按偏移量(?)访问表

Sql 按偏移量(?)访问表,sql,database,Sql,Database,我有一个1000x1000矩阵,每个条目中都有一些数据 是否可以在表中按顺序存储它(即,前一行旁边的一行)?我的意思是,如果我可以“按偏移量”(就像一个数组)访问表,因为我不会添加/删除任何条目,我会为键节省空间,这显然是多余的 可能吗?谢谢 表没有顺序。它们没有顺序。密钥不是多余的,因为它告诉您如何访问数据。如果我要为此建模,我会这样做: CREATE TABLE My_Matrix AS ( row_num SMALLINT NOT NULL, col_num

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

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


可能吗?谢谢

表没有顺序。它们没有顺序。密钥不是多余的,因为它告诉您如何访问数据。如果我要为此建模,我会这样做:

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。元素由固定长度的结构组成。