在应用程序开发过程中,我有很多表存储“少量”数据(通常为 10-40 个值,有时为id
+ ),这些数据保存“对象”的属性,例如产品的新鲜/腐烂、红色/绿色/蓝色。value
type
我不把这个属性放在产品表中,因为电子元件不能新鲜,氧气不能是红色的,表不能有无限的行数......
为了存储属性,我使用自定义小表,其中 2-3 个字段:id
用于链接,name
用于在应用程序中显示,有时type
如果属性分组在同一类别中。
主要“对象”通过中间多对多表链接到属性。
是否有任何理由为那些少于 1000 个项目(通常为 10-40 个)的“小词典”创建和维护索引?
我的目标数据库是 Oracle 但我希望回答独立于供应商...
我填写 - 不,但没有技术技能来证明我的填写...
目前尚不清楚当列设置为 时 Postgres 采取的策略NULL
:
UPDATE tbl SET
col1 = NULL,
col2 = NULL
WHERE created < current_date - INTERVAL '1 year';
Run Code Online (Sandbox Code Playgroud)
文档https://www.postgresql.org/docs/current/mvcc.html有点冗长和技术性,所以我无法可靠地推断:
是否就地执行设置为 NULL 或复制受影响的行/页?
看起来任何 UPDATE 都应该为 MVCC 语义创建新行,但如果设置为 NULL 是一种特殊情况怎么办?
为了遵守 GDPR,我认为要清空所有个人历史数据,并尝试理解大规模定期数据的含义UPDATE SET x = NULL
。我应该考虑VACUUM
之后吗?
我们有很多:
select count(*) from TBL where XDATE between ? and ? and FLD = ?;
Run Code Online (Sandbox Code Playgroud)
我们希望通过调整XDATE列(具有DATE类型)上的索引来提高性能。
什么类型的索引更适合DATE类型和条件之间?
我不再使用SQL Developer,因为发现在 Emacs SQLi 模式下使用SQL Plus更方便。
SQL Developer在选择大量行时只显示几行。但是SQL Plus倾向于转储所有符合条件的行。我可以放,ROWNUM <= N
但我经常忘记这样做。
SQL Plus是否有任何选项可以限制select
语句的输出?我会把它/opt/instantclient/glogin.sql
放在为了适用于每个会话......
index ×2
oracle ×2
index-tuning ×1
performance ×1
postgresql ×1
select ×1
sqlplus ×1
vacuum ×1