centos informix索引使用
导读:CentOS 上 Informix 索引使用与优化 一 索引设计与创建 为高频出现在 WHERE、JOIN、ORDER BY 中的列建立索引;多列经常共同出现时,使用复合索引并遵循最左前缀原则。 优先设计覆盖索引(索引包含查询所需全部列)...
CentOS 上 Informix 索引使用与优化
一 索引设计与创建
- 为高频出现在 WHERE、JOIN、ORDER BY 中的列建立索引;多列经常共同出现时,使用复合索引并遵循最左前缀原则。
- 优先设计覆盖索引(索引包含查询所需全部列),减少回表;避免在索引列上使用函数或表达式,否则通常无法命中索引。
- 对长字符串可使用前缀索引以节省空间并提升效率;定期清理冗余/重复索引,降低写入开销。
- 典型创建示例:
- 单字段索引:
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); - 前缀索引(示例取前 20 字符):
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),使优化器能选择更优执行计划。 - 编写 SQL 时避免在索引列上做计算或函数转换;尽量让索引列“裸奔”参与比较。
- 优先使用能命中索引的条件与连接顺序;必要时使用查询提示(如
INDEX)引导选择特定索引。 - 通过
EXPLAIN分析执行计划,关注是否出现全表扫描、是否使用了预期的索引或覆盖索引。 - 目标是让高频查询尽量走索引或覆盖索引,显著降低 I/O 与响应时间。
三 维护与日常管理
- 例行维护:定期执行 UPDATE STATISTICS,并在大量增删改或数据分布明显变化后考虑重建索引/清理碎片,以维持查询性能。
- 一致性检查与修复:使用 bcheck 校验并修复索引与数据的一致性,必要时删除后重建问题索引。
- 索引可用性管理:可通过
SET INDEXES idx_name DISABLED/ENABLED临时禁用/启用索引;禁用期间写入的数据在启用后会增量构建相应索引结构。 - 监控与诊断:结合 onstat、oncheck、onmode 等工具持续观察索引使用与性能瓶颈,配合第三方监控建立基线告警。
四 实用 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
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos informix索引使用
本文地址: https://pptw.com/jishu/759225.html
