如何实现仅对部分数据构建索引?

yzsDBA

    索引会占用比想象中的还要大的空间,有好几次我向表中添加索引以增加速度,但是对磁盘使用量的快速增长感到震惊。虽然索引是构建在列上,但是并不是每个行记录都需要在索引里面,这是部分索引partial indexes就提供了一个解决方案。
    假设在电子商务应用程序的数据库中有一个很大的orders表,包含应用程序中指定的每种类型的订单数据,甚至包括那些未完成的订单。此时应用程序有一个搜索功能,可以根据orders表中的一列进行过滤,但是那些未完成的订单不需要在这个索引中。
    创建部分索引时使用WHERE子句,使索引只包含符合条件的行。下面是一个简单示例:
    CREATE INDEXorders_completed_user_id  ON orders (user_id)  WHERE completed IS TRUE;
    诚然,在这样的场景中保持的数据量将会很少(user_id可能只是一个整数),但是对于文本列或多列索引,最终节省的磁盘空间将会很大。