<?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>Sergi Quiñonero &#187; mysql</title>
	<atom:link href="http://www.sergiquinonero.net/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sergiquinonero.net</link>
	<description>Sergi Quiñonero Blog Page</description>
	<lastBuildDate>Fri, 25 Mar 2011 20:04:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Explain MySQL o cómo optimiza SQL</title>
		<link>http://www.sergiquinonero.net/explain-mysql-o-como-optimiza-sql.html</link>
		<comments>http://www.sergiquinonero.net/explain-mysql-o-como-optimiza-sql.html#comments</comments>
		<pubDate>Wed, 03 Sep 2008 17:53:40 +0000</pubDate>
		<dc:creator>Sergi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql explain]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[optimizar]]></category>

		<guid isPermaLink="false">http://www.sergiquinonero.net/?p=48</guid>
		<description><![CDATA[Hoy he tenido una interesante conversación con Marc Lladó i con José Mª Rodríguez (álias UTF8  ) sobre SQL y la optimización sql del mismo (en un entorno MySQL).
Al final se puede resumir que EXPLAIN MySQL es una herramienta indispensable (no la única) a la hora de realizar tareas de otpimización sql.
Explain MySQL no [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy he tenido una interesante conversación con Marc Lladó i con José Mª Rodríguez (álias UTF8 <img src='http://www.sergiquinonero.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) sobre SQL y la <span style="color: #800000;"><strong>optimización sql</strong></span> del mismo (en un entorno MySQL).</p>
<p>Al final se puede resumir que <span style="color: #800000;"><strong>EXPLAIN MySQL</strong></span> es una herramienta indispensable (no la única) a la hora de realizar tareas de <span style="color: #800000;"><strong>otpimización sql</strong></span>.<span id="more-48"></span></p>
<p><span style="color: #800000;"><strong>Explain MySQL</strong></span> no es más que una manera de mostrar como MySQL procesa las sentencias SQL mediante sus índices y uniones. El uso de <span style="color: #800000;"><strong>Explain MySQL</strong></span> permite ayudar a los DBAs, en una primera instancia, a mejor el diseño de base de datos agregando índices y permitiendo una selección de consultas más óptimas.</p>
<p>Lo único que debemos hacer para hacer uso de <span style="color: #800000;"><strong>Explain MySQL</strong></span> es anteponer &#8220;Explain&#8221; a la SQL deseada.</p>
<blockquote>
<div><span class="syntax"><span class="syntax_alpha syntax_alpha_reservedWord">EXPLAIN</span> <span class="syntax_alpha syntax_alpha_reservedWord">SELECT</span> <span class="syntax_punct">*</span> <span class="syntax_alpha syntax_alpha_reservedWord">FROM</span> <span class="syntax_quote syntax_quote_backtick">`localidades`</span> <span class="syntax_alpha syntax_alpha_reservedWord">WHERE</span> <span class="syntax_alpha syntax_alpha_identifier">id</span> <span class="syntax_punct">=</span><span class="syntax_digit syntax_digit_integer">1</span></span></div>
</blockquote>
<div>
<p>Ejecutando esta SQL, MySQL nos indica como la está procesando y nos mostrará un listado con información sobre índices, tablas, resultados, etc.</p>
</div>
<div>
<p>En el resultado de <strong><span style="color: #800000;">explain de mysql</span></strong> visualizaremos una tabla con 10 columnas de información para cada tabla implicada</p>
</div>
<div style="text-align: center;"><a href="http://www.sergiquinonero.net/wp-content/uploads/2008/09/explain_mysql.jpg"><img class="alignnone size-full wp-image-49" title="explain mysql" src="http://www.sergiquinonero.net/wp-content/uploads/2008/09/explain_mysql.jpg" alt="explain mysql" width="500" height="62" /></a></div>
<div>De las columnas anteriores cabe destacar:</div>
<ol>
<li><span style="color: #800000;"><strong>type</strong></span>: Esta columna indica el tipo de unión que se está usando (de más a menos óptimo).
<ol>
<li><strong>const</strong>: Es la más óptima y se dá cuando la tabla tiene como máximo una fila que coincide. Como solo hay una fila coincidente, MySQL la considerará como constante por el optimizador.</li>
<li><strong>eq_ref</strong>: Una fila será leída de la tabla A por cada combinación de fila de la tabla B. Este tipo es usada cuando todas las partes de un índice son usados para la consulta y el índice es UNIQUE o PRIMARY</li>
<li><strong>ref</strong>: Todas las filas con valores en el índice que coincidan serán leídos desde esta tabla por cada combinación de filas de las tablas previas. Si la clave que es usada coincide sólo con pocas filas, esta unión es buena.</li>
<li><strong>range</strong>: Sólo serán recuperadas las filas que estén en un rango dado, usando un índice para seleccionar las filas. La columna key indica que índice se usará, y el valor key_len contiene la parte más grande de la clave que fue usada. La columna ref será NULL para este tipo.</li>
<li><strong>index</strong>: Este es el mismo que ALL, excepto que sólo el índice es escaneado. Este es usualmente más rápido que ALL, ya que el índice es usualmente de menor tamaño que la tabla completa.</li>
<li><strong>ALL</strong>: Realiza un escaneo completo de tabla por cada combinación de filas de las tablas previas. Este caso es el peor de todos.</li>
</ol>
</li>
<li><span style="color: #800000;"><strong>possible_keys</strong></span>: Esta columna indica los posibles índices a utilizar en la consulta</li>
<li><span style="color: #800000;"><strong>key</strong></span>: Esta columna indica el indice que MySQL actualmente está usando. Esta columna es NULL si no se ha elegido ninguno. Es interesante saber que podemos forzar a MySQL a usarlo (y también a ignorarlo) mediante el uso de <em>FORCE INDEX</em>, <em>USE INDEX </em>o <em>IGNORE INDEX</em></li>
<li><span style="color: #800000;"><strong>key_len</strong></span>: El tamaño del índice usado. A menor valor mejor.</li>
<li><span style="color: #800000;"><strong>ref</strong></span>: La columna ref muestra que columna o constante es usada junto a la key para seleccionar las columnas de la tabla</li>
<li><span style="color: #800000;">rows</span>: Indica el número de columnas que MySQL cree necesario examinar para ejecutar la SQL.</li>
<li><span style="color: #800000;"><strong>extra</strong></span>: Indica información adicional de como MySQL ha resuelto la SQL y hay que prestar atención si aparece <em>USING FILESORT</em> o <em>USING TEMPORARY</em>. En el primer caso, indica que MySQL debe hacer un paso extra para recuperar la información. En el segundo, MySQL necesita generar una tabla extra para mantener la información y después mostrarla y es típico al usar <em>GROUP BY</em> u <em>ORDER BY</em>.</li>
</ol>
<p>En ocasiones, MySQL puede mostrar ALL en la columna type cuando:</p>
<ol>
<li>La tabla es tan pequeña que MySQL ve más rapido hacer un escaneo completo de la tabla.</li>
<li>No hay restricciones usando las cláusulas ON o WHERE.</li>
<li>Se compara columnas indexadas con valores cosntantes</li>
<li>Las claves utilizadas devuelven muchos registros que coinciden con el valor.</li>
</ol>
<p>Aún así, hay que decir que éste no es el único método de <span style="color: #800000;"><strong>optimización SQL</strong></span>, aunque es uno bueno.</p>
<p>Para más información visita la <a rel="nofollow" href="http://dev.mysql.com/doc/refman/5.0/en/explain.html" target="_blank">referncia</a></p>
<!-- AdSense Now! V1.83 -->
<!-- Post[count: 2] -->
<div class="adsense adsense-leadout" style="float:left;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-3509193416949473";
/* Sergiquinonero.net */
google_ad_slot = "0327514928";
google_ad_width = 234;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>]]></content:encoded>
			<wfw:commentRss>http://www.sergiquinonero.net/explain-mysql-o-como-optimiza-sql.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

