作者MacPerson (Gary)
看板C_Sharp
标题Re: [问题] SQL怎麽写才会快呢?
时间Sat Aug 24 23:41:44 2013
※ 引述《bernachom (Terry)》之铭言:
: 最近和朋友聊到这个问题
: 讨论的不是SQL的语法,是说,在C#里,怎麽去读这个字串会比较快呢?
: 例如说:
: 这样子写 : string dbconnection = "SELECT A FROM B WHERE C ='0'";
: 然後也可以这样子写 :
: string AA="SELECT A ", BB="FROM B ",CC="WHERE C='0' ";
: string dbconnection =AA+BB+CC;
: 这样子写法之类的
: 但是好像用类似第二种方式,拆开再合并执行会快一些?
: (我们合并是用这个AppendFormat)
: 虽然不太懂原因,但是好像快一些
: 想询问的是,SQL都是拆开再合并,这样子的写法会比较快吗?
: 有没有在执行上比较有效率的方式呢,因为希望能让SQL再快一些
: 谢谢教导了
就我所理解来讨论这个问题:
1. 字串的操作最好以stringbuilder来作处理,你可能要先去google一下,stringbilder
的用处及优点在哪?以及字串的操作如果不用stringbuilder会有哪些坏处及好处?
2. SQL的执行快慢并不在於程式里执行字串的操作,你应该要加强的是sql语法的优化,
如果你目前正在tunning sql查询,给你个建议 再去google 『sql 执行计画』,你可
以得知你的SQL查询的执行成本,来去作语法优化的动作
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.246.72.136
1F:推 jimmy701010:以上两点都正确 08/24 23:48
2F:→ bernachom:请教一下,如果是静态字串的话,那把字串拆开相加,还会 08/25 00:04
3F:→ bernachom:比不拆开来得快吗? 08/25 00:04
4F:→ bernachom:就像是我第一个和第二个SQL写得这个样子~ 08/25 00:04
5F:→ bernachom:第一个都不拆的话,照理说不是应该比不拆开来的快吗? 08/25 00:05
首先,这个问题你google stringbuilder就会有答案。
再来,我想程式执行的快慢,在SQL Statement并不会因为你将字串怎麽拆怎麽接会有
明显差异,因为一切都跟『记忆体』有关。
以前受馈於版上众位热心人士.... 我将解答PO在下面好了
动态字串操作时,会产生很多不必要的记忆体,如下:
string a = "SELECT *"
a = a + " FROM TEST"
记忆体实际上 为了这个操作 NEW了2~3个参考 所以才会推荐你动态字串都用string
builder
再来你这边属於静态字串操作,但是字串如何操作,与SQL的运作无关,毕竟字串组
一组後会送到SERVER作编译动作,重点是在SQL语法方面。
如果您指的是系统的效率的话,我想字串会这样拆主要是为了维护方便,至於效能..
我想人体是不会查觉得出来。
※ 编辑: MacPerson 来自: 111.246.72.136 (08/25 00:13)
※ 编辑: MacPerson 来自: 111.246.72.136 (08/25 00:29)
※ 编辑: MacPerson 来自: 111.246.72.136 (08/25 00:30)
6F:→ bernachom:最後四行,点出我的问题了,我正在想说,为什麽我看大家 08/25 00:35
7F:→ bernachom:都拆开,原因应该是维护方便 08/25 00:36
8F:→ bernachom:谢谢您的热心帮忙 :) 08/25 00:36
9F:→ Litfal:单指.net用SQL的话,不要再自己串查询字串了..EF、Linq都好 08/26 16:25
10F:→ Litfal:真要用ADO.NET的话,用Parameter也好..... 08/26 16:26
11F:→ a926:组SQL字串 太容易有Injection攻击了 可以考虑L大的方式 08/27 11:15
12F:→ bernachom:谢谢指导:) 这几个月才开始学而已,感谢帮忙(笔记) 08/27 20:32