首页 新闻 搜索 专区 学院

关于多表联合查询索引设计建议

0
悬赏园豆:50 [待解决问题]

1. 表的关系 

  Customer 客户表  (Id,Name,Phone etc...)

  Recipient  收件人表 (Id,Name,Phone etc...)

  Order 订单表  (Id,TradeNo,TradeTime,[CustomerId],[RecipientId] etc...)

    CustomerId 外键 关联Customer表

    RecipientId 外键 关联 Recipient表

  OrderItem 订单明细表 (Id,[OrderId] Product,Quantity etc...)

    OrderId 外键 关联Order表

2. 查询语句 

  select  * from 
  Order o   inner join Customer c on o.CustomerId = c.Id   inner join Recipient r on o.RecipientId = r.Id   inner join OrderItem i on o.OrderId = i.OrderId   where   TradeTime > [] and TradeTime < []   and (c.Name like %[]% or c.Phone %[]% or TradeNo %[]%) -- [] 代表日期区间 -- %[]% 代表模糊搜索关键字

3. 问题

 如上的查询语句,当前在某个TradeTime区间内,模糊搜索某个TradeNo关键字的时候,
 如何设计Order表的索引,才能使用这个语句更有效率更快?

比如

CREATE NONCLUSTERED INDEX 
IX_RecipientId_CustomerId_TradeTime
ON [Order] (CustomerId,[RecipientId],[TradeTime])
INCLUDE ([TradeNo],其他字段...)

--在只有
--[IX_CustomerId]  和 [IX_RecipientId] 情况下 2W数据 要1分多钟 无法接受

--如果加上
--IX_RecipientId_TradeTime_INCLUDES_(Order表大部分列) 情况下要40多秒
 

 

 

 

 

    

    

kaleyroy的主页 kaleyroy | 初学一级 | 园豆:160
提问于:2018-06-19 18:42
< >
分享
所有回答(3)
0

有没有模拟数据的库啊  提供下也好写代码啊

ta_wuhen | 园豆:271 (菜鸟二级) | 2018-06-26 18:10
0

时间聚集索引,其他随意

huiyuanai709 | 园豆:204 (菜鸟二级) | 2018-07-17 23:06
0

c.Name like %[]%  注定扫全表。。。别瞎忙活了。。

Постой! | 园豆:829 (小虾三级) | 2018-08-09 10:35

能做的部分 就是  外键加索引   时间字段加索引

支持(0) 反对(0) Постой! | 园豆:829 (小虾三级) | 2018-08-09 10:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册