陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235 / 19906632509 / 19906733890 / 19905812933(微信同号)

客服微信

【PostgreSQL PGCE-092题目解析-15】PostgreSQL中支持在同一列中创建多个索引。

作者:炎燚小寶
原创
发布时间:2024-01-11 09:22
浏览量:1172

考试科目:PGCE-E-091

考试题量:44 道单项选择题、29 道多项选择题(每题 2 分)

通过分数:60%

考试时间:60min

本文为云贝教育刘峰(微信:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载




PostgreSQL中支持在同一列中创建多个索引。

A、正确

B、错误


参考答案:A



解析


在 PostgreSQL 中,一般来说,在同一列上创建多个独立的索引是不被推荐的,因为这可能导致维护复杂性和资源浪费。然而,如果您确实有这样的需求,可以使用不同的命名空间(schema)来为同一列创建多个索引。以下是一个示例:

sqlCopy code

-- 创建一个表
CREATE TABLE example_table (
    id SERIAL PRIMARY KEY,
    value INTEGER
);

-- 在同一列上创建两个不同的索引
CREATE INDEX idx_value_even ON example_table (value) WHERE value % 2 = 0;
CREATE INDEX idx_value_odd ON example_table (value) WHERE value % 2 <> 0;

-- 查询使用其中一个索引
EXPLAIN SELECT * FROM example_table WHERE value = 4;



在这个例子中, example_table 表的 value 列有两个索引: idx_value_even idx_value_odd ,分别用于存储偶数和奇数值。这是一个不常见的用例,只是为了演示在同一列上创建多个索引的可能性。

请注意,这种做法可能会引入复杂性,而不是提高性能。在实际应用中,请确保仔细评估您的需求,并根据性能测试选择适当的索引策略。通常,使用复合索引或合适的单一索引更容易管理且更有效。


补充:索引架构及复合索引


实验准备

drop table if exists t1;
create table t1 ( a int, b varchar(50));
insert into t1
select a.*, md5(a::varchar) from generate_series(1,500000) a;


查看SQL执行计划

testdb=# explain select * from t1 where a=1 and b='c9f0f895fb98ab9159f51fd0297e236d';

                              QUERY PLAN
-----------------------------------------------------------------------------
Gather (cost=1000.00..8292.10 rows=1 width=37)
  Workers Planned: 2
  -> Parallel Seq Scan on t1 (cost=0.00..7292.00 rows=1 width=37)
       Filter: ((a = 1) AND ((b)::text = 'c9f0f895fb98ab9159f51fd0297e236d

  '::text))
(6 rows)


这面发现执行计划为全表扫描


创建组合索引

testdb# create index idx_t1_n1 on t1(a,b);


再次查看执行计划

testdb=# explain select * from t1 where a=1 and b='c9f0f895fb98ab9159f51fd0297e236d';
                               QUERY PLAN
--------------------------------------------------------------------------
  Index Only Scan using idx_t1_n1 on t1 (cost=0.42..4.44 rows=1 width=37)
    Index Cond: ((a = 1) AND (b = 'c9f0f895fb98ab9159f51fd0297e236d

  '::text))
(4 rows)


PostgreSQL PGCE考试为理论考试,需通过两门考试才能拿到“PostgreSQL PGCE证书”。



以下是PostgreSQL官网的考试费,可以添加云贝教育的课程顾问老师微信19941464235或者19906632509,咨询有优惠


PostgreSQL证书如下 合格考生公布:考后不超过 5 个工作日  “开源软件联盟 PostgreSQL 分会”公众号发布  证书寄送:考后统一寄送至培训机构)



云贝教育有专业的PostgreSQL PGCE认证培训课程,想快速通过考试的同学可以扫码联系老师咨询(点击文字转跳至PostgreSQL PGCE纲)