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多秒
有没有模拟数据的库啊 提供下也好写代码啊
时间聚集索引,其他随意
c.Name like %[]% 注定扫全表。。。别瞎忙活了。。
能做的部分 就是 外键加索引 时间字段加索引