<?xml version="1.0" encoding="utf-8"?><!-- generator="b2evolution/6.11.7-stable" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Frank Kalis - Neueste Kommentare auf SELECT COUNT(*) vs. SELECT COUNT(1)</title>
		<link>https://www.insidesql.org/blogs/frankkalis/?disp=comments</link>
		<atom:link rel="self" type="application/rss+xml" href="https://www.insidesql.org/blogs/frankkalis/?tempskin=_rss2&#38;disp=comments&#38;p=2485" />
		<description></description>
		<language>de-DE</language>
		<docs>http://backend.userland.com/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=6.11.7-stable"/>
		<ttl>60</ttl>
		<item>
			<title>admin in Antwort auf: SELECT COUNT(*) vs. SELECT COUNT(1)</title>
			<pubDate>Fri, 11 Feb 2011 08:06:22 +0000</pubDate>
			<dc:creator><a href="http://www.insidesql.org/blogs/" title="Benutzerprofil anzeigen" class="login user nowrap" rel="bubbletip_user_1"><span class="identity_link_username">admin</span></a></dc:creator>
			<guid isPermaLink="false">c1154@https://www.insidesql.org/blogs/</guid>
			<description>Hier sind noch weitere Referenzen zu diesem Thema:_
&lt;a href=&quot;http://bradsruminations.blogspot.com/2009/09/age-old-select-vs-select-1-debate.html&quot;&gt;http://bradsruminations.blogspot.com/2009/09/age-old-select-vs-select-1-debate.html&lt;/a&gt;
&lt;a href=&quot;http://www.sqlskills.com/BLOGS/CONOR/2008/02/default.aspx?page=2&quot;&gt;http://www.sqlskills.com/BLOGS/CONOR/2008/02/default.aspx?page=2&lt;/a&gt;</description>
			<content:encoded><![CDATA[Hier sind noch weitere Referenzen zu diesem Thema:_
<a href="http://bradsruminations.blogspot.com/2009/09/age-old-select-vs-select-1-debate.html">http://bradsruminations.blogspot.com/2009/09/age-old-select-vs-select-1-debate.html</a>
<a href="http://www.sqlskills.com/BLOGS/CONOR/2008/02/default.aspx?page=2">http://www.sqlskills.com/BLOGS/CONOR/2008/02/default.aspx?page=2</a>]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2011/01/25/select-count-vs-select-count-1#c1154</link>
		</item>
		<item>
			<title>admin in Antwort auf: SELECT COUNT(*) vs. SELECT COUNT(1)</title>
			<pubDate>Tue, 01 Feb 2011 08:09:43 +0000</pubDate>
			<dc:creator><a href="http://www.insidesql.org/blogs/" title="Benutzerprofil anzeigen" class="login user nowrap" rel="bubbletip_user_1"><span class="identity_link_username">admin</span></a></dc:creator>
			<guid isPermaLink="false">c1152@https://www.insidesql.org/blogs/</guid>
			<description>Hi Thomas,
es würde mich nicht wirklich überraschen. :-)

Wahrscheinlich ist es ähnlich dem EXISTS (SELECT * ...) vs. EXISTS (SELECT 1 ...). Wenn mich jetzt mein Gedächtnis nicht trügt, war es zumindest bis SQL Server 2000 (2005?) so, dass der Parser ein * immer in die tatsächliche Spaltenliste entfaltete, nur um dann festzustellen, dass dieses * im Kontext eines EXISTS stand und die Liste dann gleich wieder verwarf, da sie nicht von Interesse war. Dies mochte einen minimalen Effekt auf die Parse- und Kompilierphase gehabt haben, der daraus resultierende Plan war aber in beiden Fällen identisch. Conor Cunningham hat dies mal so beschrieben: 

&quot;It is functionally equivalent from the end plan perspective.

For compilation time, it may be ever-so-slightly faster to use &quot;SELECT 1 
FROM T&quot; because it does not need to expand the * into a column list and then 
prune it away.  Obviously it would matter more on tables with more columns.

Select &#039;1&#039; is also fine.  I use SELECT 1 since it&#039;s the smallest thing I can 
do in an exists subquery - fewer allocations ;).

Hope that helps.

Conor Cunningham
SQL Server Query Optimization Development Lead
Microsoft&quot;

Zu finden &lt;a href=&quot;http://www.archivum.info/microsoft.public.sqlserver.programming/2005-11/02098/Re-SELECT-%271%27-FROM-mytable.html&quot;&gt;hier&lt;/a&gt;.

Ich weiss jetzt nicht, ob SQL Server mittlerweile &quot;schlauer&quot; geworden ist, aber als Relikt daraus, habe ich mir angewöhnt EXISTS (SELECT 1...) zu verwenden.
Bei COUNT(1) ist das anders. Das habe ich eigentlich nie verwendet. Vielleicht aus deshalb, weil ich selten ein COUNT(*) benutze.

Sorry, aber es hat mit Spam zu tun, dass ich fast nur Plain-Text in Kommentaren erlaube. Du kannst aber einfach den Link einfügen. Ich kann den dann als solchen formatieren, bevor ich den Kommentar veröffentliche.&lt;br /&gt;</description>
			<content:encoded><![CDATA[Hi Thomas,
es würde mich nicht wirklich überraschen. :-)

Wahrscheinlich ist es ähnlich dem EXISTS (SELECT * ...) vs. EXISTS (SELECT 1 ...). Wenn mich jetzt mein Gedächtnis nicht trügt, war es zumindest bis SQL Server 2000 (2005?) so, dass der Parser ein * immer in die tatsächliche Spaltenliste entfaltete, nur um dann festzustellen, dass dieses * im Kontext eines EXISTS stand und die Liste dann gleich wieder verwarf, da sie nicht von Interesse war. Dies mochte einen minimalen Effekt auf die Parse- und Kompilierphase gehabt haben, der daraus resultierende Plan war aber in beiden Fällen identisch. Conor Cunningham hat dies mal so beschrieben: 

"It is functionally equivalent from the end plan perspective.

For compilation time, it may be ever-so-slightly faster to use "SELECT 1 
FROM T" because it does not need to expand the * into a column list and then 
prune it away.  Obviously it would matter more on tables with more columns.

Select '1' is also fine.  I use SELECT 1 since it's the smallest thing I can 
do in an exists subquery - fewer allocations ;).

Hope that helps.

Conor Cunningham
SQL Server Query Optimization Development Lead
Microsoft"

Zu finden <a href="http://www.archivum.info/microsoft.public.sqlserver.programming/2005-11/02098/Re-SELECT-%271%27-FROM-mytable.html">hier</a>.

Ich weiss jetzt nicht, ob SQL Server mittlerweile "schlauer" geworden ist, aber als Relikt daraus, habe ich mir angewöhnt EXISTS (SELECT 1...) zu verwenden.
Bei COUNT(1) ist das anders. Das habe ich eigentlich nie verwendet. Vielleicht aus deshalb, weil ich selten ein COUNT(*) benutze.

Sorry, aber es hat mit Spam zu tun, dass ich fast nur Plain-Text in Kommentaren erlaube. Du kannst aber einfach den Link einfügen. Ich kann den dann als solchen formatieren, bevor ich den Kommentar veröffentliche.<br />]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2011/01/25/select-count-vs-select-count-1#c1152</link>
		</item>
		<item>
			<title> Thomas in Antwort auf: SELECT COUNT(*) vs. SELECT COUNT(1)</title>
			<pubDate>Mon, 31 Jan 2011 20:59:49 +0000</pubDate>
			<dc:creator><span class="user anonymous" rel="bubbletip_comment_1151">Thomas</span></dc:creator>
			<guid isPermaLink="false">c1151@https://www.insidesql.org/blogs/</guid>
			<description>Hallo Frank,
diese Regel, dass &quot;SELECT COUNT(1)&quot; schneller ist als &quot;SELECT COUNT(*)&quot; galt am SQL Server aber tatsächlich mal. Erst recht spät wurde hier im Optimizer eine Sonderregel eingebaut.
Jetzt muss ich tippen, denn meine alten Unterlagen warf ich vor ein paar Monaten weg: Ich bin aber ziemlich sicher, dass diese Regel wenigstens noch für die Version SQL Server 4.2 galt. Und ich meine, dass Microsoft die Sonderbehandlung zuerst einbaute (vermutlich in Version 6.5 oder wahrscheinlicher Version 7.0), danach erst Sybase (vermutlich Version 11). Als wir unsere ersten Firmen-TSQL-Richtlinien verfassten, da galt das jedenfalls wirklich noch. Dementsprechend war das auch in vielen System-Prozeduren des SQL-Servers drin (vermutlich alle, die die 
ursprünglich noch von Sybase stammten ;-) ).

Als Indiz kann man werten, dass Sybase-Mitarbeiter das Konstrukt auch 1998 noch benutzten. Such mal im &quot;Microsoft SQL Server to ASE Migration Guide&quot; (&lt;a href=&quot;http://m.sybase.com/content/1003133/sql_to_ase_guide.pdf&quot;&gt;http://m.sybase.com/content/1003133/sql_to_ase_guide.pdf&lt;/a&gt;) nach &quot;SELECT COUNT&quot;. 

Viele Grüße

Thomas
PS: Schade, dass in Deinen Kommentaren keine Links erlaubt sind.</description>
			<content:encoded><![CDATA[Hallo Frank,
diese Regel, dass "SELECT COUNT(1)" schneller ist als "SELECT COUNT(*)" galt am SQL Server aber tatsächlich mal. Erst recht spät wurde hier im Optimizer eine Sonderregel eingebaut.
Jetzt muss ich tippen, denn meine alten Unterlagen warf ich vor ein paar Monaten weg: Ich bin aber ziemlich sicher, dass diese Regel wenigstens noch für die Version SQL Server 4.2 galt. Und ich meine, dass Microsoft die Sonderbehandlung zuerst einbaute (vermutlich in Version 6.5 oder wahrscheinlicher Version 7.0), danach erst Sybase (vermutlich Version 11). Als wir unsere ersten Firmen-TSQL-Richtlinien verfassten, da galt das jedenfalls wirklich noch. Dementsprechend war das auch in vielen System-Prozeduren des SQL-Servers drin (vermutlich alle, die die 
ursprünglich noch von Sybase stammten ;-) ).

Als Indiz kann man werten, dass Sybase-Mitarbeiter das Konstrukt auch 1998 noch benutzten. Such mal im "Microsoft SQL Server to ASE Migration Guide" (<a href="http://m.sybase.com/content/1003133/sql_to_ase_guide.pdf">http://m.sybase.com/content/1003133/sql_to_ase_guide.pdf</a>) nach "SELECT COUNT". 

Viele Grüße

Thomas
PS: Schade, dass in Deinen Kommentaren keine Links erlaubt sind.]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2011/01/25/select-count-vs-select-count-1#c1151</link>
		</item>
			</channel>
</rss>
