还给出了以下索引建议:CREATE NONCLUSTERED INDEX [_dta_index_BCardPurses_16_658101385__K2_4] ON [dbo].[积分账户表]
(
[积分类型] ASC
)
INCLUDE ( [积分]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]CREATE STATISTICS [_dta_stat_658101385_2_1] ON [dbo].[积分账户表]([积分类型], [ID])
这个索引,不太合理吧,你是要查询某个主账户的 积分,那么就应该是:CREATE NONCLUSTERED INDEX [_dta_index_BCardPurses_16_658101385__K2_4] ON [dbo].[积分账户表]
(
主账户号,[积分类型] ASC
)
INCLUDE ( [积分])
from 积分账户表
where 主账户号 = 'xxx' and 积分类型='yyy'
开始没有留意。 创建这个统计信息有什么用处?其实就是有利于sql server产生比较好的执行计划。
from 积分账户表
where 主账户号 = 'xxx' and 积分类型='yyy'
实际使用中我们不会进行sum统计。在存储过程中使用的查询是:select 积分类型,积分 from 积分账户表 p inner join 积分类型表 t on p.积分类型=t.积分类型 where 主账户号 = 'xxx' order by t.优化顺序业务需求是:查找出用户的所有类型积分,然后按优化顺序扣减积分所以,存储过程中会按优化顺序查询出所有类型积分,然后再比较单个类型积分余额是否足够,足够就扣减,不足再从下一次类型积分扣。
--
我在想是否有必要在积分账户表直接标记优化顺序,那样就不需要联接积分类型表进行查询了。
from 积分账户表
where 主账户号 = 'xxx' and 积分类型='yyy'
实际使用中我们不会进行sum统计。在存储过程中使用的查询是:select 积分类型,积分 from 积分账户表 p inner join 积分类型表 t on p.积分类型=t.积分类型 where 主账户号 = 'xxx' order by t.优化顺序业务需求是:查找出用户的所有类型积分,然后按优化顺序扣减积分所以,存储过程中会按优化顺序查询出所有类型积分,然后再比较单个类型积分余额是否足够,足够就扣减,不足再从下一次类型积分扣。
--
我在想是否有必要在积分账户表直接标记优化顺序,那样就不需要联接积分类型表进行查询了。那就按照主账户字段建个索引把:create index idx_xxx on 积分账户表(主账户号)