这个sql 如何优化,比如做索引

山尖美色 2017-10-30 05:57:33
SELECT isnull(max(convert(numeric,right( substring(BillCode,3,4),4))),0) FROM [Bill] where BillType=99 AND left(BillCode,2)='RZ'


目的取一个单据的编号,单据越来越多,速度变慢
...全文
245 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2017-10-31
  • 打赏
  • 举报
回复
BillType和BillCode上加索引。 left(BillCode,2)='RZ'改成BillCode like ‘RZ%’试试。 right( substring(BillCode,3,4),4)这里用right是不是有些多此一举。
吉普赛的歌 2017-10-31
  • 打赏
  • 举报
回复
--添加一个计算列
ALTER TABLE [Bill] ADD BillCodeCal AS ISNULL(CONVERT(NUMERIC, RIGHT(SUBSTRING(BillCode, 3, 4), 4)),0) PERSISTED
--添加索引
CREATE INDEX IX_Bill_BillType_BillCode_BillCodeCal ON [Bill](BillType,BillCode,BillCodeCal DESC)

SELECT MAX(BillCodeCal)
FROM   [Bill]
WHERE  BillType = 99
       AND LEFT(BillCode, 2) = 'RZ'
  • 打赏
  • 举报
回复
;with cte(BillCode) as (
select BillCode FROM [Bill] where BillType=99 AND left(BillCode,2)='RZ' 
)select isnull(max(convert(numeric,right( substring(BillCode,3,4),4))),0) from cte
不确定会不会快,你可以试试

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧