数据库 – 对于小型表而言,是否比大型表更快地查询设定数量的列?

我正在设计一个包含高分列表的数据库,并且需要SQL查询快速列表.

高分列表中的条目与用户之间将存在一对一的关系,但我不需要列表本身的所有用户信息.

所以,我想知道设计是否会更快地查询数据库.

设置1:

2个表与1对1的关系.

用户表:
ID(PK) – 名称 – 电子邮件 – entryID(FK)

条目表:
ID(PK) – 得分 – 消息 – 用户ID(FK)

查询:

SELECT score, message
FROM entries
ORDER BY score desc

设置2:

1张桌子

用户表:
ID – 名称 – 电子邮件 – 得分 – 消息

查询:

SELECT score, message
FROM users
ORDER BY score desc

我想知道的是:当您选择列的子集时,表中的列数是否会影响查询的速度?

最佳答案 如果您的表没有索引,则查询中的列数无关紧要 – 它会扫描具有所有列的块.唯一的影响是返回时间 – 发送给客户端的数据量会有所不同.

如果您计划在查询中包含索引和索引列的列表 – 那么它确实很重要.例如,使用9.6,您可以点击仅索引扫描…

啊,是的,它对具有TOASTed值的列很重要.

简短的例子:

t=# create table s09 (i int, a text);
CREATE TABLE
t=# insert into s09 select generate_series, 'text' from generate_series(1,9999999,1);
INSERT 0 9999999
t=# analyze s09;
ANALYZE
t=# explain analyze select * from s09;
                                                   QUERY PLAN
-----------------------------------------------------------------------------------------------------------------
 Seq Scan on s09  (cost=0.00..154053.58 rows=9999858 width=9) (actual time=0.010..1712.339 rows=9999999 loops=1)
 Planning time: 0.046 ms
 Execution time: 2825.514 ms
(3 rows)

t=# explain analyze select i from s09;
                                                   QUERY PLAN
-----------------------------------------------------------------------------------------------------------------
 Seq Scan on s09  (cost=0.00..154053.58 rows=9999858 width=4) (actual time=0.010..1828.329 rows=9999999 loops=1)
 Planning time: 0.028 ms
 Execution time: 2937.231 ms
(3 rows)
点赞