CentOS 上 Informix 索引使用与优化
一 索引设计与创建
CREATE INDEX idx_custname ON customer(name);CREATE INDEX idx_ord_custdate ON orders(cust_id, order_date);CREATE UNIQUE INDEX ux_cust_email ON customer(email);CREATE INDEX idx_name_prefix ON customer(name(20));CREATE FUNCTION toUpper(name VARCHAR(100))
RETURNS VARCHAR(100) WITH (NOT VARIANT)
RETURN upper(name);
CREATE INDEX ucname_idx ON t1(toUpper(name));
二 使用与查询优化
UPDATE STATISTICS HIGH/MEDIUM),使优化器能选择更优执行计划。INDEX)引导选择特定索引。EXPLAIN 分析执行计划,关注是否出现全表扫描、是否使用了预期的索引或覆盖索引。三 维护与日常管理
SET INDEXES idx_name DISABLED/ENABLED 临时禁用/启用索引;禁用期间写入的数据在启用后会增量构建相应索引结构。四 实用 SQL 示例
-- 1) 基础索引
CREATE INDEX idx_emp_dept ON emp(dept_id);
-- 2) 复合索引(最左前缀:dept_id 可单独命中,dept_id+salary 联合命中)
CREATE INDEX idx_emp_dept_sal ON emp(dept_id, salary);
-- 3) 覆盖索引(假设查询只取 emp_id, name, dept_id)
CREATE INDEX idx_emp_cover ON emp(dept_id, emp_id, name);
-- 4) 唯一约束索引
CREATE UNIQUE INDEX ux_emp_badge ON emp(badge_no);
-- 5) 前缀索引(长字符串常用)
CREATE INDEX idx_emp_name_prefix ON emp(name(30));
-- 6) 函数索引(大小写不敏感查询)
CREATE FUNCTION toUpper(name VARCHAR(100))
RETURNS VARCHAR(100) WITH (NOT VARIANT)
RETURN upper(name);
CREATE INDEX uc_emp_name ON emp(toUpper(name));
-- 7) 更新统计信息(HIGH 更精确,MEDIUM 更快)
UPDATE STATISTICS HIGH FOR TABLE emp;
-- 8) 临时禁用/启用索引(维护窗口常用)
SET INDEXES idx_emp_name_prefix DISABLED;
-- ... 批量导入/维护 ...
SET INDEXES idx_emp_name_prefix ENABLED;
-- 9) 一致性检查(在数据库目录或指定路径下执行)
bcheck -y table_name
以上示例覆盖创建、覆盖、唯一、前缀与函数索引,以及统计信息更新、索引禁用/启用与一致性检查等常见场景。