数据库表定义好索引未生效

日常开发中,经常会遇到这个问题,明明我已经定义好了索引,在开发环境、测试环境、准生产环境执行查看执行计划,都没有问题,但是一上到生产环境,无效。丝毫没有改善效果。

为什么?

表面现象:生产环境数据库和其他三个环境是不一样的,所以才会有这个问题。即使准生产接近生产环境,但是数据库除非实时同步或者频繁定期同步生产数据库,否则还是不一样。

深入:为什么同一个表,同一个索引,只是数据多少的问题,就导致同一个查询语句执行计划不同?一个走索引,速度飞快。另一个不走索引,慢如蜗牛?

结论:索引所在列,或者组合索引所在列,数据分布有问题,导致数据库算法认为使用索引不如用其他方式的执行计划来处理。

这是一个常见问题,很多数据库设计规范上有说明,索引要加在合适的位置,比如一张1亿条记录的大表,你把索引放在IsDelete字段上,而这个字段只有两个值,0或1,有何用?

猜你喜欢

转载自blog.csdn.net/airingyuan/article/details/105575281
今日推荐