我有一个包含大约 500K 行的表。该表在“状态”列上有一个索引。所以我运行以下解释命令:
EXPLAIN QUERY PLAN SELECT * FROM my_table WHERE status = 'ACTIVE'
结果是可预测的“解释”......
SEARCH TABLE my_table USING INDEX IDX_my_table_status (status=?) (~10 rows)
在表中添加了许多额外的行之后,我调用了“分析”。之后,查询似乎慢了很多,所以我重新运行了我的解释,现在看到以下内容:
SCAN TABLE my_table (~6033 rows)
我注意到的第一件事是,这两个行估计都相差甚远。最大的担忧是,一旦运行 ANALYZE,索引似乎就被跳过了。我尝试了 REINDEX - 无济于事。我可以取回索引的唯一方法是删除它们,然后重新创建它们。有人见过这个吗?这是一个错误吗?任何想法我做错了什么?我已经在多个数据库上尝试过这个,我看到了相同的结果。这是在我的 PC、MAC 和 iPhone/iPad 上——结果都是一样的。