Ubuntu MariaDB 索引优化策略
一 基础规范与索引设计原则
PRIMARY KEY(id)、INDEX(id)、UNIQUE INDEX(id),或 INDEX(a,b,c) 与 INDEX(a,b)、INDEX(a)。count(distinct left(列名, N))/count(*),一般前缀长度为20时区分度可达90%+(视业务而定)。二 查询与索引匹配实践
type(尽量达到 ref/eq_ref/range/index,避免 ALL 全表扫描)、key(实际使用的索引)、rows(扫描行数)、Extra(避免 Using filesort/Using temporary)。FORCE INDEX:仅在统计信息不准或优化器选择错误时短期使用,并通过修正索引/SQL/统计信息根治。三 维护与执行效率
ANALYZE TABLE)。SHOW PROCESSLIST、SHOW STATUS、mysqladmin status、top/htop、iostat、ss 观察慢查询、锁等待、IO 与连接数,结合 Prometheus/Grafana/Zabbix 做长期可视化监控。四 Ubuntu 配置与运维要点
mysqldumpslow 或 pt-query-digest 分析。五 典型场景与索引示例
SELECT id, name FROM t WHERE status='active' AND age>30;CREATE INDEX idx_status_age_id_name ON t(status, age, id, name);(覆盖索引,避免回表)。SELECT id, created FROM t WHERE status='open' ORDER BY created DESC;CREATE INDEX idx_status_created ON t(status, created);(利用索引有序性避免 filesort)。SELECT o.id, u.name FROM orders o JOIN users u ON o.user_id=u.id WHERE o.status='paid';CREATE INDEX idx_orders_status_user ON orders(status, user_id);;CREATE INDEX idx_users_id ON users(id);(外键/关联列务必有索引)。SELECT url FROM urls WHERE url LIKE 'https://example.com/%';CREATE INDEX idx_url_prefix ON urls(url(20));(前缀长度依据区分度评估设定)。