You need to enable JavaScript to run this app.
文档中心
云数据库 PostgreSQL 版

云数据库 PostgreSQL 版

复制全文
下载 pdf
插件
智能索引推荐(index_advisor)
复制全文
下载 pdf
智能索引推荐(index_advisor)
简介与适用场景​
index_advisor 是一款实用的 PostgreSQL 插件,它能够自动分析给定的 SQL 查询语句,并推荐可能提升查询性能的最优索引。该插件通过在内部利用 hypopg 创建虚拟索引并评估其对查询计划的影响,来生成具体的索引创建建议。​
它适用于以下场景:​
  • SQL 调优:当面对一个慢查询时,可以用它来快速获取索引优化建议。​
  • 开发阶段:在开发过程中,辅助开发者为新功能涉及的复杂查询设计合理的索引策略。​
注意事项​
  • 依赖 hypopg:index_advisor 的功能完全依赖于 hypopg 插件。在安装 index_advisor 时,必须确保 hypopg 也被一同安装和启用。​
  • 索引类型限制:目前,index_advisor 仅支持推荐单列 B-tree 索引。对于多列索引或其它类型的索引,它无法提供建议。​
  • 参数化查询:当分析包含参数(如 $1, $2)的预备语句(Prepared Statement)时,如果插件无法自动推断参数的数据类型,您可能需要在查询字符串中为参数显式添加类型转换,例如 ... WHERE user_id = $1::integer。​
创建与删除插件​
创建插件​
执行 CREATE EXTENSION 命令来安装 index_advisor。使用 CASCADE 子句可以确保其依赖的 hypopg 插件也一并被自动安装。​
​
-- 需要 hypopg,未安装 hypopg 时加上 cascade​
CREATE EXTENSION index_advisor cascade;​
-- 查看是否安装成功​
SELECT * FROM pg_extension WHERE extname = 'hypopg' or extname = 'index_advisor';​
​
删除插件​
如果不再需要,可以执行以下命令来卸载插件。​
​
DROP EXTENSION index_advisor;​
​
注意​
卸载 index_advisor 不会自动卸载 hypopg。如果 hypopg 也不再需要,需单独卸载。​
基础使用​
index_advisor 的核心功能通过 index_advisor() 函数提供。该函数接收一个 SQL 查询字符串作为输入,并返回一个或多个索引创建建议。​
函数原型​
index_advisor(sql_query TEXT)​
使用示例​
  1. 创建示例表​
  • ​
    CREATE TABLE book ( id INT PRIMARY KEY, title TEXT NOT NULL, author_id INT NOT NULL);​
    ​
  1. 为简单查询推荐索引​
  • 分析一个带有 WHERE 条件的查询。​
  • ​
    SELECT * FROM index_advisor('SELECT id FROM book WHERE title = ''A Tale of Two Cities''');​
    ​
  1. 为参数化查询推荐索引​
  • 分析一个使用占位符的查询。​
  • ​
    SELECT * FROM index_advisor('SELECT id FROM book WHERE author_id = $1');​
    ​
  1. 为复杂 JOIN 查询推荐索引​
  • index_advisor 同样能处理包含多表连接的复杂查询。​
  • ​
    -- 假设存在 author 和 publisher 表​
    SELECT * FROM index_advisor(' ​
    SELECT b.id, b.title ​
    FROM book b ​
    JOIN author a ON b.author_id = a.id ​
    WHERE a.name = $1​
    ');​
    ​
​
​
最近更新时间:2026.03.31 10:39:12
这个页面对您有帮助吗?
有用
有用
无用
无用