我打算使用类别指示字符串或整数值来回溯/后写标记100,000条记录。还有更多。此列标记的类别反映了不同类别类型的标量连续体,基本上从“更宽松”到“更严格”。我考虑使用字符串值,而不是整数,以防有一天我回到它并且不知道什么意味着什么。
这就是使用字符串,可读性的原因。
但是我会非常依赖这些专栏,根据这个标准选择大量的记录。
显然不管它是什么我都会在它上面放一个索引,但是使用索引,我不确定查询整数的速度比使用字符串快多少。我注意到使用布尔值的速度很快,并且可以合理地假设可以比基于此的字符串更快地查询小整数。
我一直在考虑这种交易已经有一段时间了,所以我想我会解决一个问题。感谢
答案 0 :(得分:2)
如果它真的是一个表示“looser”和“tighter”之间某个有序级别的字符串,请考虑使用枚举:
http://www.postgresql.org/docs/current/static/datatype-enum.html
这样,你将获得两全其美。
但是,一个小小的注意事项:理想情况下,请确保提前确定所有可能的值。更改枚举当然是可能的,但是当它的数字表示的顺序(它的oid,即32位整数)不再匹配时,这样做会在内部(在32位浮点字段上)添加额外的查找和排序步骤最后的订单。 (性能差异很小,但如果您的数据增长到数十亿行,请记住这一点。再次说明:它只适用于您更改现有枚举的顺序。)
关于你问题的第二部分,在我自己的几年前的有限测试中,排序小整数(16位)比正常整数(32位)慢一点。我想这是因为它们无论如何都被操纵为32位整数。排序或查询整数(如枚举的情况)比排序任意字符串更快。如果您不需要在路上添加任意值的灵活性,请使用枚举:它们将为您提供最佳的每个世界。