tai*_*ail 8 postgresql database-design optimization query-performance
假设我有这张表:
Table "public.orders"
Column | Type | Collation | Nullable | Default
-----------------+---------------+-----------+----------+---------
o_orderkey | integer | | not null |
o_custkey | integer | | |
o_orderstatus | character(1) | | |
o_totalprice | numeric(12,2) | | |
o_orderdate | date | | |
o_orderpriority | character(15) | | |
o_clerk | character(15) | | |
o_shippriority | integer | | |
o_comment | character(79) | | |
Run Code Online (Sandbox Code Playgroud)
如果我有涉及o_orderstatus、o_orderpriority或列的查询,我可以将数据类型更改为 以改进它们吗o_clerk?o_commentchar(n)text
Erw*_*ter 13
是的。而且可能很多。
使用(alias )永远不会获得性能。你根本不会获得任何东西,因为这种类型已经过时,大多无用,并且令人沮丧。有关的:character(n)char(n)
但是您在手册的引用中看到了这样的内容:
除了使用空白填充类型时增加存储空间外
char(n)是空白填充类型。诸如此类的列名comment大多表示空白填充的浪费。text或者varchar消除臃肿,你桌子周围的一切都会变得更快,因为你的平均速度。行大小可能会缩小到一半以下。每个数据页的元组越多意味着每个查询要读取和处理的页数就越少,这是影响性能的最重要因素。
在进行此操作时,请对列进行有利的排序以提高效率,但是:
Column | Type | Collation | Nullable | Default
---------------+---------------+-----------+----------+---------
orderkey | integer | | not null |
custkey | integer | | |
orderdate | date | | |
shippriority | integer | | |
totalprice | numeric(12,2) | | |
orderstatus | varchar(1) | | |
orderpriority | varchar(15) | | |
clerk | varchar(15) | | |
comment | varchar(79) | | |
Run Code Online (Sandbox Code Playgroud)
为什么?
我保留了长度限制varchar(n),但如果这些限制是任意的,请text改用。还快一点点。(并且减少了极端情况的麻烦。)请参阅:
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |