近日,项目上数据库SQL的语句优化中,碰到了很多同学们建索引比较粗放的情况。
简单总结一下大家对索引的认知,以备后用吧
- 索引不止有Btree一种,创建合适的索引,不是只有左匹配的LIKE才能命中。
- 索引要讲究数据内容的差异性,如果大部分数据都一样的情况下,可以考虑对“另类”的数据创建“条件索引”。
- 在vacuum之前和之后,有可能命中不同的索引,要结合实际情况(数据变更的频繁程度,数据变更的时机);例如,有些数据库表的数据只有晚上跑批才会变更,有些数据库表只有上午会有数据变更,有些数据库表的数据相对比较固定。
- 最重要的一点,索引的命中情况,一定用explain analyze一下,不要凭经验,更不要轻信网上的八股文。一定要用生产环境进行验证。因为数据库优化器在不同的数据量和数据差异情况,索引的命中是动态的,不是一成不变的。
最后,实践出真知,因为我们碰到过PG数据库第一人都说“不应该啊”的情况。
网友评论