Database 通过在覆盖索引中不包含select列,我是否可以为insert操作获得更高的性能?

Database 通过在覆盖索引中不包含select列,我是否可以为insert操作获得更高的性能?,database,indexing,Database,Indexing,通过在定义覆盖索引时不包括select列而只包括where列,同时在密集写表中保持读性能,我是否可以为insert操作获得更高的性能 通过排除覆盖索引的select列,我的目标是通过实际表中的clustered indexprimary键来达到实际值select列 比如, FruitsForSale Table columns rowid | fruit | state | price SELECT price FROM fruitsforsale WHERE fruit='Or

通过在定义覆盖索引时不包括select列而只包括where列,同时在密集写表中保持读性能,我是否可以为insert操作获得更高的性能

通过排除覆盖索引的select列,我的目标是通过实际表中的clustered indexprimary键来达到实际值select列

比如,

FruitsForSale Table columns 
rowid |  fruit  |  state  |   price

SELECT price FROM fruitsforsale WHERE fruit='Orange' AND state='CA'

CREATE INDEX Idx ON FruitsForSale(fruit, state);
(instead of CREATE INDEX Idx ON FruitsForSale(fruit, state, price);)

insert的性能增益将非常小,可能根本无法测量-索引稍微小一些,因此要写入的字节更少,而写入操作的数量基本保持不变。另一方面,由于索引不足以满足查询,示例中给定的select将明显慢一些,就像花费两倍的时间一样。出于这个原因,我认为这不是一个好主意。

我不能完全理解这一点-请您添加一个表、覆盖索引和插入的小示例。另外,是否可以添加特定的RDBMS标记?RDBMS在这里很重要-例如,在SqlServer中,您可以使用INCLUDE关键字实现覆盖索引,例如,在水果上创建索引Idx,表示INCLUDEprice;与第一个索引相比具有优势,因为它将允许您使用覆盖索引,而无需将RID查找返回到聚集索引以获取价格,并且与第二个索引相比具有轻微的存储优势,因为价格将仅存储在覆盖索引的叶节点上。