SQL Server索引的四个高级特性
作者:网络转载 发布时间:[ 2013/3/28 11:30:03 ] 推荐标签:
一、Index Building Filter(索引创建时过滤)
有一些索引非常低效的,比如经常查询状态为进行中的订单,订单有99%的状态是完成,1%是进行中 ,因此我们在订单状态字段上建了一个索引,性能是提高了,但是感觉索引中保存了99%的完成状态数据是永远不会查询到的,很浪费空间。如果我们的索引在建立的时间不保存完成状态的数据,那不是更好。 Index Building Filter是用来解决这个问题。
SQLServer
支持,语法示例:
create index idx_3 on order(status) where status=’running’
MySQL:不支持
Oracle:不支持,可以考虑用分区解决
二、Index Include Column(索引包含列)
我们经常需要建一些组合索引,一般有两种原因:
1、通过组合索引可以提高索引过滤度
比如订单表有会员ID和订单日期2个字段,如果我们经常要按会员和订单时间查询,
Select * from order where member_id=? and order_date between ? and ?
那建立会员ID+订单日期的索引很合适。
create index idx_1 on order(member_id,order_date);
2、索引覆盖读取
比如我们需要读取一个会员订单的订单ID+状态列表,SQL如下:
select order_id,status from order where member_id=?
如果我们的索引中只有member_id字段,那么还需要回表查询order_id和status数据才能返回结果,如果建一个member_id+order_id+status的组合索引:
那只要访问索引可以返回数据了,这种虽然性能提高了,但是由于索引多了字段,因此增加了索引建立成本和索引空间。
SQLServer
SQLServer除了支持组合索引外,还支持Index Include Column特性,Index Include Column是组合索引的一种变种,它的特点是可以指定组合索引中哪些列是排序列,哪些列只是把内容存储在索引中,这个特性不仅可以满足索引覆盖读取,而且可以减少索引对DML的性能影响。语法如:
create index idx_2 on order(member_id) include(order_id,status);
其中member_id字段是普通索引列,order_id和status列是内容include列。
普通组合索引数据存储结构示例:
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11