gpt4 book ai didi

database - 小表查询一定数量的列是否比大表更快?

转载 作者:太空狗 更新时间:2023-10-30 01:57:01 26 4
gpt4 key购买 nike

我正在设计一个包含高分列表的数据库,并且需要针对该列表快速执行 SQL 查询。

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

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

设置 1:

2 个具有 1 对 1 关系的表。

用户表:ID (PK) - 姓名 - 电子邮件 - entryID (FK)

条目表:ID (PK) - score - message - userID (FK)

查询:

SELECT score, message
FROM entries
ORDER BY score desc

设置 2:

1张 table

用户表:ID - 姓名 - 电子邮件 - 分数 - 消息

查询:

SELECT score, message
FROM users
ORDER BY score desc

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

最佳答案

如果您的表没有索引,则查询中的列数无关紧要 - 它会扫描包含所有列的 block 。唯一的影响是返回时间 - 发送到客户端的数据量会有所不同。

如果您计划拥有索引并且查询中的列列表包含索引列 - 那么它确实很重要。例如,对于 9.6,您可以点击仅索引扫描...

啊,是的,对于具有 TOAST 值的列来说确实很重要。

简短的例子:

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)

关于database - 小表查询一定数量的列是否比大表更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41300233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com