作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在设计一个包含高分列表的数据库,并且需要针对该列表快速执行 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/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!