首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问表按偏移量(?)

问访问表按偏移量(?)
EN

Stack Overflow用户
提问于 2011-09-23 21:43:03
回答 2查看 197关注 0票数 0

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

是否可以将其顺序存储在表中(即,前一行的下一行)?我的意思是,如果我可以“通过偏移量”(就像一个数组)访问这个表,假设我不会添加/删除任何条目,我将为键节省空间,这在这里是明显多余的。

有可能吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-23 21:58:39

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

代码语言:javascript
复制
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)
)

现在,如果您想通过行号和列号获得一个值,那么可以使用以下命令快速获得:

代码语言:javascript
复制
SELECT value FROM My_Matrix WHERE row_num = @row_num AND col_num = @col_num

如果你想通过一个偏移量来获取它,那么你可以使用类似这样的东西:

代码语言:javascript
复制
SELECT
    value
FROM
    My_Matrix
WHERE
    row_num = @value%1000 AND
    col_num = @value/1000

至于节省存储,您在这里讨论的是每行4个字节,矩阵最多有1M行。对于任何严肃的RDBMS来说,这都是无关紧要的。

票数 0
EN

Stack Overflow用户

发布于 2011-09-23 21:59:41

一百万行是一个相当小的表,所以我的初始假设如下所示:

代码语言:javascript
复制
CREATE TABLE tbl1 (x INT NOT NULL, y INT NOT NULL, ... some data ... , PRIMARY KEY (x,y));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7529921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档