Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

We all know that Caml is faster than using linq, since linq internally gets translated to caml.

But can anyone explain how caml is best to do sharepoint queries or how it is fast or what makes it fast ? I dont want comparison between linq and caml, its clear to me.

For me, caml is some string(xml) which must be read/parsed and then again some sql query is called in background to get the results. Can't there be any other best option to do query ?

share|improve this question

3 Answers 3

up vote 5 down vote accepted

CAML is simply the fastest (if you write efficient CAML queries that is) for the obvious reason that there is no other query language for SharePoint.

  • Linq to SP uses CAML internally
  • The API methods does not convert to CAML and queries for the whole "collection" of objects
  • The CAML query is converted to T-SQL internally by SP and queries the content databases (and you are not allowed to do that)

There is no other way to access SharePoint data, period. (Except by using the Search Index which is way faster - but not complete in terms of data).

share|improve this answer
2  
no other SUPPORTED way to access SharePoint data. wont deny that I've written a few T-sql nolock queries against my content db. –  1c1cle Jul 10 '12 at 17:29
    
search API (keyword queries)? :) –  Ivan Padabed Jul 10 '12 at 17:54
    
oh I see you have mentioned search, sorry Wictor –  Ivan Padabed Jul 10 '12 at 17:54

CAML deals with only those items which matches the filter criteria and they will retrived from database. Where Linq has the entire collection to manage with. Linq will Translate the query to CAML and send it to database and then fetch results. Hence CAML does not require the extra step.

share|improve this answer
1  
"Where Linq has the entire collection to manage with.". This is not true. The Linq Provider will convert, what it can, into a CAML in order to retrieve only matching items. It won't read the whold collection. Please note I use "what it can" sentence. That means that you have to be very very careful when using Linq to SharePoint. You should check you queries to ensure the maximum of operations are performed in CAML by the provider. The best way to avoid such issues is to avoid Linq. The second way is the redirect the DataContext.Log to the debug window, and check which query are executed. –  Steve B Jul 10 '12 at 11:56
    
that means Linq converts parts of the query into CAML? –  sharmila Jul 10 '12 at 12:14
    
Yes. So does all Linq2xxx (sql, entities, sharepoint, etc.). If you want to learn more, google on Linq query provider. This is a great feature of .Net, but knowing how it works backstage is important to avoid performance issues. –  Steve B Jul 10 '12 at 12:21
    
But still this doesn't answer my question : how/what makes CAML fast ? I dont want linq vs caml. Isn't there overload to parse that CAML string ?? –  newcoderintown Jul 10 '12 at 13:30

actually the statement is not true for all cases. actually in most cases it is possible to write Linq2SP queries as efficient as CAML could be, but you usually have to put some efforts to track generated CAML

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.