<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Komentáře k příspěvku: MySQL nebezpečí průtokových tabulek, zamyšlení nad insert into &#8230; select from</title>
	<atom:link href="http://blog.novoj.net/2010/02/02/mysql-nebezpeci-prutokovych-tabulek-zamysleni-nad-insert-into-select-from/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.novoj.net/2010/02/02/mysql-nebezpeci-prutokovych-tabulek-zamysleni-nad-insert-into-select-from/</link>
	<description>Dává je jen zřídka, obvykle jim není moc rozumět a často vám ani k ničemu nejsou.</description>
	<lastBuildDate>Mon, 06 Feb 2012 19:08:17 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>Od: Otec Fura</title>
		<link>http://blog.novoj.net/2010/02/02/mysql-nebezpeci-prutokovych-tabulek-zamysleni-nad-insert-into-select-from/comment-page-1/#comment-36631</link>
		<dc:creator>Otec Fura</dc:creator>
		<pubDate>Sat, 19 Mar 2011 19:16:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=778#comment-36631</guid>
		<description>No tahle moje část kódu si sice řídila vlastní transakce, ale pokud existovala nějaká širší transakce, tak se do ní jen zapojila (&lt;a href=&quot;http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/transaction/TransactionDefinition.html#PROPAGATION_REQUIRED&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;PROPAGATION_REQUIRED&lt;/a&gt;) - tj. nemohl jsem zaručit vytvoření tabulky před transakcí :( .</description>
		<content:encoded><![CDATA[<p>No tahle moje část kódu si sice řídila vlastní transakce, ale pokud existovala nějaká širší transakce, tak se do ní jen zapojila (<a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/transaction/TransactionDefinition.html#PROPAGATION_REQUIRED" target="_blank" rel="nofollow">PROPAGATION_REQUIRED</a>) &#8211; tj. nemohl jsem zaručit vytvoření tabulky před transakcí <img src='http://blog.novoj.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  .</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Maaartin</title>
		<link>http://blog.novoj.net/2010/02/02/mysql-nebezpeci-prutokovych-tabulek-zamysleni-nad-insert-into-select-from/comment-page-1/#comment-36481</link>
		<dc:creator>Maaartin</dc:creator>
		<pubDate>Thu, 17 Mar 2011 16:45:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=778#comment-36481</guid>
		<description>Samozrejme vytvoreni temp tabulky je DDL a dela commit, ale me se vzdy podarilo posunout to pred zacatek transakce. Netusim v jakym pripade by to nemelo jit. Takze si ji vytvoris, v ramci transakce naplnis a na konci vyprazdnis. Pokud ji potrebujes opakovane, pak musis jen dat pozor, abys ji nepouzil vickrat soucasne, ale to by se stat nemelo. Tez je treba dat pozor aby dva kusy kody od ruznych lidi - ci od jednoho - nepouzily omylem stejny nazev, ale to lze lehce resit vhodnou konvenci a pro jistotu grep-em. Pri poolovani pripojeni je treba zacit necim jako &quot;DROP TEMPORARY TABLE IF EXISTS&quot;, coz se hodi i tehdy kdyz si chces kus kodu opakovane vyzkouset.

Celkove mam pocit, ze temporalni tabulky jsou v MySql naprosta nutnost. Hodne prikazu jinak proste nejde napsat efektivne, protoze vnoreny dotazy jsou nekdy neskutecne pomaly (a to z toho duvodu, ze MySql to neumi udelat poradne). Databazisti se na temporalni tabulky mraci, ale me prijde ze je to obdoba lokalnich promennych - zvysuje citelnost a zprehlednuje kod. Samozrejme kdyby DB doopravdy umely lokalni promenne, tj. vcetne typu TABLE, tak by to bylo mnohem lepsi.</description>
		<content:encoded><![CDATA[<p>Samozrejme vytvoreni temp tabulky je DDL a dela commit, ale me se vzdy podarilo posunout to pred zacatek transakce. Netusim v jakym pripade by to nemelo jit. Takze si ji vytvoris, v ramci transakce naplnis a na konci vyprazdnis. Pokud ji potrebujes opakovane, pak musis jen dat pozor, abys ji nepouzil vickrat soucasne, ale to by se stat nemelo. Tez je treba dat pozor aby dva kusy kody od ruznych lidi &#8211; ci od jednoho &#8211; nepouzily omylem stejny nazev, ale to lze lehce resit vhodnou konvenci a pro jistotu grep-em. Pri poolovani pripojeni je treba zacit necim jako &#8222;DROP TEMPORARY TABLE IF EXISTS&#8220;, coz se hodi i tehdy kdyz si chces kus kodu opakovane vyzkouset.</p>
<p>Celkove mam pocit, ze temporalni tabulky jsou v MySql naprosta nutnost. Hodne prikazu jinak proste nejde napsat efektivne, protoze vnoreny dotazy jsou nekdy neskutecne pomaly (a to z toho duvodu, ze MySql to neumi udelat poradne). Databazisti se na temporalni tabulky mraci, ale me prijde ze je to obdoba lokalnich promennych &#8211; zvysuje citelnost a zprehlednuje kod. Samozrejme kdyby DB doopravdy umely lokalni promenne, tj. vcetne typu TABLE, tak by to bylo mnohem lepsi.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Otec Fura</title>
		<link>http://blog.novoj.net/2010/02/02/mysql-nebezpeci-prutokovych-tabulek-zamysleni-nad-insert-into-select-from/comment-page-1/#comment-36380</link>
		<dc:creator>Otec Fura</dc:creator>
		<pubDate>Wed, 16 Mar 2011 09:52:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=778#comment-36380</guid>
		<description>Na MySql je vytvoření temporární tabulky považované za DDL příkaz, který přeruší aktuální transakci (commitne ji).</description>
		<content:encoded><![CDATA[<p>Na MySql je vytvoření temporární tabulky považované za DDL příkaz, který přeruší aktuální transakci (commitne ji).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: lzap</title>
		<link>http://blog.novoj.net/2010/02/02/mysql-nebezpeci-prutokovych-tabulek-zamysleni-nad-insert-into-select-from/comment-page-1/#comment-36374</link>
		<dc:creator>lzap</dc:creator>
		<pubDate>Wed, 16 Mar 2011 08:56:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=778#comment-36374</guid>
		<description>&quot;Jelikož jsem potřeboval zachovat transakčnost, nemohl jsem využít temporárních tabulek...&quot;

Copak to nejde vytvořit záznam v temp tabulce v rámci jedné transakce? V Oracle i na Postgresu lze tedy vytvořit temp tabulku v rámci transakce (ona se dokonce na konci transakce smaže).

Zajímavé každopádně. Je to dobré vědět.</description>
		<content:encoded><![CDATA[<p>&#8222;Jelikož jsem potřeboval zachovat transakčnost, nemohl jsem využít temporárních tabulek&#8230;&#8220;</p>
<p>Copak to nejde vytvořit záznam v temp tabulce v rámci jedné transakce? V Oracle i na Postgresu lze tedy vytvořit temp tabulku v rámci transakce (ona se dokonce na konci transakce smaže).</p>
<p>Zajímavé každopádně. Je to dobré vědět.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Otec Fura</title>
		<link>http://blog.novoj.net/2010/02/02/mysql-nebezpeci-prutokovych-tabulek-zamysleni-nad-insert-into-select-from/comment-page-1/#comment-17787</link>
		<dc:creator>Otec Fura</dc:creator>
		<pubDate>Wed, 03 Feb 2010 09:03:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=778#comment-17787</guid>
		<description>Nepodporuje - má alternativní zápisy, ale takhle to přímo použít nejde:

http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html

Mě se to celé naštěstí podařilo předělat na vnořené selecty, které zdá se jsou i výkonnější než původní řešení - hádám právě pro to, že se to celé dokáže odehrát v paměti a nemusí se to fyzicky dostat do té odkládací tabulky, což by zahrnovalo IO operace.</description>
		<content:encoded><![CDATA[<p>Nepodporuje &#8211; má alternativní zápisy, ale takhle to přímo použít nejde:</p>
<p><a href="http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html" rel="nofollow">http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html</a></p>
<p>Mě se to celé naštěstí podařilo předělat na vnořené selecty, které zdá se jsou i výkonnější než původní řešení &#8211; hádám právě pro to, že se to celé dokáže odehrát v paměti a nemusí se to fyzicky dostat do té odkládací tabulky, což by zahrnovalo IO operace.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: milos</title>
		<link>http://blog.novoj.net/2010/02/02/mysql-nebezpeci-prutokovych-tabulek-zamysleni-nad-insert-into-select-from/comment-page-1/#comment-17777</link>
		<dc:creator>milos</dc:creator>
		<pubDate>Wed, 03 Feb 2010 07:37:38 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=778#comment-17777</guid>
		<description>Resili jsme podobne problemy. Dost casto se zpracovani zrychlilo, kdyz jsme selecty (i updaty) rozdelili a ukladali mezivysledky.

Zda se ale, ze vsechny enginy musi resit stejne problemy a reseni se lisi jen v detailech. Takze zpusob ukladani na stranky a politika zamku bude podobna. Delam na Sybase a tzv. Deleted rows (ale i Forwarded rows - radky, ktere se nevesly po update a nachazeji se na jine strance, nez by mely byt) se nam objevuji take. U kmenovych tabulek jsme provedli po jedne reorganizaci, to je ale narocne na misto. 

Nejlepsi asi bude mit casovou ulohu, ktera v klidove dobe provozu udela truncate. Ten je navic vyhodny i z hlediska indexu.

INSERT .. SELECT se navic v Sybase chova jeste lepe, nez SELECT.... INTO tabulka (nevim, zda to v MySQL jde).</description>
		<content:encoded><![CDATA[<p>Resili jsme podobne problemy. Dost casto se zpracovani zrychlilo, kdyz jsme selecty (i updaty) rozdelili a ukladali mezivysledky.</p>
<p>Zda se ale, ze vsechny enginy musi resit stejne problemy a reseni se lisi jen v detailech. Takze zpusob ukladani na stranky a politika zamku bude podobna. Delam na Sybase a tzv. Deleted rows (ale i Forwarded rows &#8211; radky, ktere se nevesly po update a nachazeji se na jine strance, nez by mely byt) se nam objevuji take. U kmenovych tabulek jsme provedli po jedne reorganizaci, to je ale narocne na misto. </p>
<p>Nejlepsi asi bude mit casovou ulohu, ktera v klidove dobe provozu udela truncate. Ten je navic vyhodny i z hlediska indexu.</p>
<p>INSERT .. SELECT se navic v Sybase chova jeste lepe, nez SELECT&#8230;. INTO tabulka (nevim, zda to v MySQL jde).</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: blog.novoj.net @ 2012-02-09 05:54:34 -->
