我有一个大表(+- 100 万行,7 列,包括主键)。该表包含两列(即:symbol_01
和 symbol_02
),它们已建立索引并用于查询。该表包含以下行:
id symbol_01 symbol_02 value_01 value_02
1 aaa bbb 12 15
2 bbb aaa 12 15
3 ccc ddd 20 50
4 ddd ccc 20 50
根据示例,第 1 行和第 2 行是相同的,只是 symbol_01
和 symbol_02
交换了,但它们的 value_01
和value_02
。第 3 行和第 4 行也是如此。整个表格都是如此,symbol_01
+symbol_02
的每个组合本质上都有两行。
我需要找到一种更好的方法来处理这个问题以消除重复。到目前为止,我正在考虑的解决方案是只有一列名为 symbol
的列,它是两个符号的组合,因此表格如下:
id symbol value_01 value_02
1 ,aaa,bbb, 12 15
2 ,ccc,ddd, 20 50
这会将行数减少一半。附带说明一下,symbol
列中的每个值都是唯一的。总是需要查询使用这两个符号的结果,所以我会这样做:
select value_01, value_02
from my_table
where symbol like '%,aaa,%' and symbol like '%,bbb,%'
这可行,但我的问题是关于性能的。这仍然是一张大 table (并且很快就会变得更大)。所以我的问题是,鉴于 symbol
将被索引,每个 symbol
组合都是唯一的,并且我需要使用 LIKE
查询结果。
有更好的方法吗?我不确定 LIKE
对性能有多大影响,但我没有看到替代方案?
最佳答案
没有高性能的解决方案,因为您的问题是将多个值硬塞到一列中。
创建一个子表(带有当前/主表的外键)来单独保存您想要搜索的所有单个值,为该列建立索引,您的查询将很简单>而且快。
关于postgresql - 在索引列上优化使用 LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38882700/