一、索引创建:聚焦高频与复合场景
WHERE
子句、JOIN
条件和ORDER BY
子句中频繁使用的列创建索引,这是提升查询效率的核心手段。例如,订单表的order_date
、客户表的customer_id
等字段若经常参与查询,应优先建索引。(customer_id, order_date)
)。需注意字段顺序:将选择性最高(不同值数量多)或最常用于查询条件的列放在前面,以提高索引利用率。VARCHAR(255)
)或二进制字段,使用前缀索引(如CREATE INDEX idx_name ON table_name(column_name(20))
),既能节省存储空间,又能保持较好的查询性能。二、查询优化:最大化索引利用率
WHERE UPPER(name) = 'JOHN'
),这会导致索引无法使用;LIKE '%xxx%'
),此类查询会触发全表扫描;OR
条件,若字段未全部索引,可能导致索引失效。(customer_id, name)
覆盖SELECT customer_id, name FROM orders WHERE customer_id = 100
),避免回表操作(从索引到表的额外读取),显著提升查询速度。EXPLAIN
语句查看查询计划,识别是否使用了索引、是否存在全表扫描等问题(如EXPLAIN SELECT * FROM orders WHERE customer_id = 100
),针对性调整索引策略。三、索引维护:保持高效运行
UPDATE STATISTICS
命令(如UPDATE STATISTICS HIGH FOR TABLE orders
),确保优化器能准确评估索引效率。oncheck -cDI
查看碎片率),使用onreorg
工具重建索引(如onreorg -i idx_name -d database_name
),恢复索引性能。onstat -g ind
命令监控索引的使用频率、扫描次数等指标,识别未使用或使用率低的索引(如SELECT * FROM sysindexes WHERE idxusecount = 0
),及时删除冗余索引。四、索引类型选择:匹配查询需求
WHERE order_date BETWEEN '2025-01-01' AND '2025-09-30'
。WHERE customer_id = 100
),但不支持范围查询,且哈希冲突会影响性能,需根据查询模式选择。MATCH(title, content) AGAINST('keyword')
),提升文本搜索效率,适用于日志、文档等场景。五、其他优化技巧
SMALLINT
代替INTEGER
、CHAR(10)
代替VARCHAR(10)
),减少索引存储空间,提升查询速度。COMPRESS YES
),减少磁盘I/O,提升查询性能(适用于高负载环境)。order_date
按月分区)配合索引,可将查询范围缩小到单个分区,提升查询效率。