关于存储过程参数效率问题

jldzy 2014-09-01 09:58:45
存储过程2种形式参数,其中@selectSql 最长的时候有5000字符,多表连接和查询多个字段。

@countSql nvarchar(max),
@selectSql nvarchar(max)
其中 @countSql= ‘select count(*) from ('+@selectSql+') a', 这2个参数是在程序里面拼接出来直接调用存储过程。


@selectSql nvarchar(max)
然后在存储过程里面 拼接@countSql= ‘select count(*) from ('+@selectSql+') a'

在测试的时候,发现方案一的效率比二的高,理论上方案二可以减少网络传输,特别是传过来的字符串特别长的时候。
但是在数据库里面进行拼接,也是非常消耗性能的。


...全文
177 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jldzy 2014-09-02
  • 打赏
  • 举报
回复
是一个可以直接执行的SQL, SQL中还是尽量避免拼接SQL语句。 有一点不明白的是:你方法二中,在数据库里面也必须要拼接执行么? 是的,其实就是实现一个分页的功能,先查总数,然后再查具体的数据。 方案一 就是在程序端把SQL 拼接好,存储过程直接调用, 执行2次,一次查总数,一次查具体行 方案二 就是在存储过程里面,拼接一个求总数的SQL,然后执行,执行2次,一次查总数,一次查具体行 就是想知道,如果存储过程参数 太长的话,调用的时候 会不会增加网络传输, 例如 参数是 10个字符,和参数是 5000个字符
發糞塗牆 2014-09-02
  • 打赏
  • 举报
回复
你的字符是类似一大串ID那样吗?
唐诗三百首 2014-09-01
  • 打赏
  • 举报
回复
理论上2个方案应该是一样的执行效率. 建议从@selectSql所对应的查询语句优化上下功夫.
shoppo0505 2014-09-01
  • 打赏
  • 举报
回复
SQL中还是尽量避免拼接SQL语句。 有一点不明白的是:你方法二中,在数据库里面也必须要拼接执行么?

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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