面试题答案
一键面试- 索引情况分析:
- 对于条件
age > 30
,如果在age
字段上有索引,例如CREATE INDEX idx_age ON test_table (age);
,PostgreSQL 可能会使用这个索引来快速定位满足age > 30
条件的行。不过,由于是>
比较,索引扫描可能无法充分利用索引的有序性,可能会进行部分索引扫描。 - 对于条件
name LIKE 'John%'
,如果在name
字段上有索引,例如CREATE INDEX idx_name ON test_table (name);
,PostgreSQL 可以使用索引快速定位以John
开头的行。这种前缀匹配(LIKE 'John%'
)的情况能较好地利用索引。 - 如果在
(age, name)
上有联合索引CREATE INDEX idx_age_name ON test_table (age, name);
,PostgreSQL 可能会先利用索引筛选出age > 30
的行,然后在这些行中再筛选出name LIKE 'John%'
的行。
- 对于条件
- 查看实际执行计划:
在 PostgreSQL 中,可以使用
EXPLAIN
关键字来查看查询的执行计划。执行以下语句:EXPLAIN SELECT * FROM test_table WHERE age > 30 AND name LIKE 'John%';
EXPLAIN
会返回查询优化器计划如何执行查询的详细信息,包括是否使用了索引,使用的是哪些索引,以及表扫描的方式等。如果想要更详细的执行计划信息,例如实际执行的时间等,可以使用EXPLAIN ANALYZE
:
这会实际执行查询,并返回带有实际执行时间等详细信息的执行计划。EXPLAIN ANALYZE SELECT * FROM test_table WHERE age > 30 AND name LIKE 'John%';