我正在考虑在表上应用3个字段(类型,状态,user_id)的索引.我的大部分查询都具有使用全部3的WHERE.但是,我有几个使用量很大的查询,它们仅使用2个字段(类型和状态).
我的问题是,只比较两个字段的查询是否可以有效地使用所有3个字段创建索引?还是最好有2个索引,一个索引3个字段,一个索引2个?
解决方法:
我比MySQL更了解Oracle,但是我猜在这种情况下是一样的.索引通常是一个B树,这意味着如果索引是(类型,状态,user_id),则数据库通常仍可以使用它来搜索(类型,状态),因为它是组合索引的第一部分.但是,如果使用(status,user_id),情况就不会如此,除非有Oracle的INDEX_SKIP_SCAN之类的东西.
具有仅覆盖两个字段的第二索引可能会稍快一些,多少取决于数据.但是,如果您有两个索引,则插入数据的速度会变慢,因为它们都需要维护.它还需要更多的磁盘空间.因此,这是性能空间的权衡,只有您可以决定.