<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Groschengedanken zu Software &#187; forschung</title>
	<atom:link href="http://aysx.de/eingroschen/?feed=rss2&#038;tag=forschung" rel="self" type="application/rss+xml" />
	<link>http://aysx.de/eingroschen</link>
	<description>... und vielleicht auch dem ganzen Rest</description>
	<lastBuildDate>Tue, 18 Jun 2019 17:59:37 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>join vs subselect</title>
		<link>http://aysx.de/eingroschen/?p=175</link>
		<comments>http://aysx.de/eingroschen/?p=175#comments</comments>
		<pubDate>Tue, 19 Nov 2013 19:12:58 +0000</pubDate>
		<dc:creator><![CDATA[matthias]]></dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[forschung]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://aysx.de/eingroschen/?p=175</guid>
		<description><![CDATA[Vor einigen Jahren habe ich für den Mssql-Server herausgefunden, dass Abfragen mit &#8220;join&#8221; mehr als 100 mal schneller sein können als die gleich Abfrage in Form eines Subselects. Stimmt das auch heute für MySQL? Folgendes zeigt, dass es nicht zwingend &#8230; <a href="http://aysx.de/eingroschen/?p=175">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Vor einigen Jahren habe ich für den Mssql-Server herausgefunden, dass Abfragen mit &#8220;join&#8221; mehr als 100 mal schneller sein können als die gleich Abfrage in Form eines Subselects. Stimmt das auch heute für MySQL? Folgendes zeigt, dass es nicht zwingend so ist.</p>
<p>Frage: Welche Postleitzahlen gibt es sowohl in Deutschland als auch in den USA?</p>
<p>Stationen auf dem Weg zur Antwort:</p>
<li> Quelle von PLZ-dumps<br />
http://www.tutorials.de/relationale-datenbanksysteme/229059-postleitzahlen-mysql-dump.html<br />
=> Einspielen in die Tabelle &#8216;orte&#8217;.</p>
<li> Quelle US Zip-Codes<br />
http://federalgovernmentzipcodes.us/free-zipcode-database.csv<br />
aufbereiten mit<br />
cut -d &#8220;,&#8221; -f2,4 free-zipcode-database.csv &gt; free-zipcode-database-zip-city-only.csv<br />
Ergänzung für einen brauchbaren MySQL-Dump überlasse ich dem geneigten Publikum.<br />
=> Einspielen in die Tabelle &#8216;orteus&#8217;.</p>
<li> SQL-Befehle übersichtlich strukturiert. Sie werden unten als 1-Zeiler benutzt:
<p></p><pre class="crayon-plain-tag">-- join
--
SELECT count(*)
FROM (
&nbsp;&nbsp; &nbsp;SELECT distinct orte.PLZ FROM 
&nbsp;&nbsp; &nbsp;orte, orteus
&nbsp;&nbsp; &nbsp;where orte.PLZ = orteus.PLZ
) t1;

-- subselect
--
SELECT count(*)
FROM (
&nbsp;&nbsp; &nbsp;SELECT distinct orte.PLZ
&nbsp;&nbsp; &nbsp;FROM orte
&nbsp;&nbsp; &nbsp;where orte.PLZ in (
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;select orteus.PLZ FROM orteus
&nbsp;&nbsp; &nbsp;)
) t2;</pre><p></p>
<p>Copy&#038;Paste aus dem mysql-Client:</p>
<p></p><pre class="crayon-plain-tag">mysql&amp;gt; select count(*) from orte;
 +----------+
 | count(*) |
 +----------+
 |&nbsp;&nbsp;&nbsp; 44188 |
 +----------+
 1 row in set (0.00 sec)

mysql&amp;gt; select count(*) from orteus;
+----------+
| count(*) |
+----------+
|&nbsp;&nbsp;&nbsp; 81831 |
+----------+
1 row in set (0.00 sec)

mysql&amp;gt; SELECT count(*) FROM (SELECT distinct orte.PLZ FROM orte, orteus where orte.PLZ = orteus.PLZ) t1;
+----------+
| count(*) |
+----------+
|&nbsp;&nbsp;&nbsp; 13365 |
+----------+
1 row in set (0.16 sec)

mysql&amp;gt; SELECT count(*) FROM (SELECT distinct orte.PLZ FROM orte where orte.PLZ in (select orteus.PLZ FROM orteus)) t2;
+----------+
| count(*) |
+----------+
|&nbsp;&nbsp;&nbsp; 13365 |
+----------+
1 row in set (0.18 sec)</pre><p></p>
<p>Ergebnis: Für ca. 44000&#215;81000 ist fast kein Unterschied auszumachen.<br />
Ich bin angenehm überrascht. Einschränkung der Gültigkeit der Erkenntnis: Die Datenmenge im obigen Beispiel ist nicht gross. Damals bei Mssql ging es um ungefähr 12000&#215;625000, also Faktor 0,5 aber immerhin diesselbe Grössenordnung.</p>
]]></content:encoded>
			<wfw:commentRss>http://aysx.de/eingroschen/?feed=rss2&#038;p=175</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
