我可以查看表中所有索引的总大小
SELECT pg_size_pretty (pg_indexes_size('table_name'));
以及特定索引的大小:
select pg_size_pretty(pg_relation_size('index_name'));
,
但我想分别检索一个包含表的每个索引的大小信息的列表(索引大小的列表及其所属的相应索引名称)。
我有一个包含数亿行的表,我想从同一个表的 2 个索引列中获取唯一值的单个列表(没有唯一的行 ID)。
为了说明这一点,假设我们有一个包含一fruits
列和一veggies
列的表,我想构建一个healthy_foods
包含两列中唯一值的列表。
我尝试过以下查询:
与联盟
WITH cte as (
SELECT fruit, veggie
FROM recipes
)
SELECT fruit as healthy_food
FROM cte
UNION -- <---
SELECT veggie as healthy_food
FROM cte;
Run Code Online (Sandbox Code Playgroud)
与 UNION ALL 然后 DISTINCT ON
WITH cte as (...)
SELECT DISTINCT ON (healthy_food) healthy_food FROM -- <---
(SELECT fruit as healthy_food
FROM cte
UNION ALL -- <---
SELECT veggie as healthy_food
FROM cte) tb;
Run Code Online (Sandbox Code Playgroud)
与 UNION …
示例(假)情况:当将专门查询包含电子邮件(文本类型)的列以获取精确的字符串匹配时,对该列进行索引。
SELECT * FROM mytable WHERE email = 'test@test.com'
Run Code Online (Sandbox Code Playgroud)
在这些情况下,哈希索引是否比 B-TREE 有优势且没有缺点?
它们对插入/更新性能的影响是否不同?
(编辑:并且从未按此列排序)