<?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>Commentaires sur : Comment réécrire une requête SQL ? Partie 1</title>
	<atom:link href="http://www.dbnewz.com/2009/11/26/que-signifie-reecrire-une-requete-sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dbnewz.com/2009/11/26/que-signifie-reecrire-une-requete-sql/</link>
	<description>le blog français sur les SGBD - MySQL, Oracle et plus...</description>
	<lastBuildDate>Tue, 31 Jan 2012 16:20:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Par : stephane</title>
		<link>http://www.dbnewz.com/2009/11/26/que-signifie-reecrire-une-requete-sql/comment-page-1/#comment-1331</link>
		<dc:creator>stephane</dc:creator>
		<pubDate>Mon, 25 Oct 2010 13:33:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbnewz.com/?p=406#comment-1331</guid>
		<description>Si tu connais Maatkit, tu peux essayer d&#039;utiliser mk-query-advisor. Si tu ne connais pas, j&#039;en parlerai dans un prochain post :)</description>
		<content:encoded><![CDATA[<p>Si tu connais Maatkit, tu peux essayer d&#8217;utiliser mk-query-advisor. Si tu ne connais pas, j&#8217;en parlerai dans un prochain post <img src='http://www.dbnewz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : gene69</title>
		<link>http://www.dbnewz.com/2009/11/26/que-signifie-reecrire-une-requete-sql/comment-page-1/#comment-1329</link>
		<dc:creator>gene69</dc:creator>
		<pubDate>Thu, 21 Oct 2010 23:46:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbnewz.com/?p=406#comment-1329</guid>
		<description>est-ce qu&#039;il existe des outils qui permettent de réécrire la requete automatiquement?

Je veux dire, lorsqu&#039;on a écrit une requete avec un résultat juste avec une écriture complexe, je cherche un outil qui me signale automatiquement les simplifications à faire.

Je suis certain que c&#039;est possible pour l&#039;avoir fait à la main et pour avoir vu MS SQL-Server le faire, cependant, je me demande si ça existe pour MySql.</description>
		<content:encoded><![CDATA[<p>est-ce qu&#8217;il existe des outils qui permettent de réécrire la requete automatiquement?</p>
<p>Je veux dire, lorsqu&#8217;on a écrit une requete avec un résultat juste avec une écriture complexe, je cherche un outil qui me signale automatiquement les simplifications à faire.</p>
<p>Je suis certain que c&#8217;est possible pour l&#8217;avoir fait à la main et pour avoir vu MS SQL-Server le faire, cependant, je me demande si ça existe pour MySql.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : stephane</title>
		<link>http://www.dbnewz.com/2009/11/26/que-signifie-reecrire-une-requete-sql/comment-page-1/#comment-1208</link>
		<dc:creator>stephane</dc:creator>
		<pubDate>Thu, 03 Dec 2009 16:47:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbnewz.com/?p=406#comment-1208</guid>
		<description>Oui dans le cas des clauses OR, l&#039;optimiseur est embêté car il ne peut utiliser qu&#039;un seul index à la fois...index qui ne sera donc pas pertinent pour l&#039;ensemble des OR. D&#039;où le full table scan.

En utilisant des UNION comme tu le dis, on évite les full table scan si les colonnes sur lesquelles portent les OR ont des index. En contrepartie, on crée une table temporaire à cause des UNION.

A partir de MySQL 5.0, il n&#039;y a en principe plus ce problème car l&#039;optimiseur sait combiner dans ce cas particulier plusieurs index. On voit alors dans le EXPLAIN un affichage du type :
type: index_merge
key: idx_pw,idx_ph,idx_pc
...
Extra: Using sort_union(idx_pw,idx_ph,idx_pc); Using where

Ca pourra être l&#039;objet d&#039;un prochain post !</description>
		<content:encoded><![CDATA[<p>Oui dans le cas des clauses OR, l&#8217;optimiseur est embêté car il ne peut utiliser qu&#8217;un seul index à la fois&#8230;index qui ne sera donc pas pertinent pour l&#8217;ensemble des OR. D&#8217;où le full table scan.</p>
<p>En utilisant des UNION comme tu le dis, on évite les full table scan si les colonnes sur lesquelles portent les OR ont des index. En contrepartie, on crée une table temporaire à cause des UNION.</p>
<p>A partir de MySQL 5.0, il n&#8217;y a en principe plus ce problème car l&#8217;optimiseur sait combiner dans ce cas particulier plusieurs index. On voit alors dans le EXPLAIN un affichage du type :<br />
type: index_merge<br />
key: idx_pw,idx_ph,idx_pc<br />
&#8230;<br />
Extra: Using sort_union(idx_pw,idx_ph,idx_pc); Using where</p>
<p>Ca pourra être l&#8217;objet d&#8217;un prochain post !</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Xavier</title>
		<link>http://www.dbnewz.com/2009/11/26/que-signifie-reecrire-une-requete-sql/comment-page-1/#comment-1207</link>
		<dc:creator>Xavier</dc:creator>
		<pubDate>Mon, 30 Nov 2009 11:53:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbnewz.com/?p=406#comment-1207</guid>
		<description>Dans le même genre, il y a les clauses OR:

select titi, tata from table where cond1 or cond2 or cond3;

Visiblement, on peut gagner en réécrivant la requête comme suit:

select titi, tata from table where cond1 UNION \
select titi, tata from table where cond2 UNION \
select titi, tata from table where cond3;

Visiblement, mysql est trop vite tenté par un full table scan sinon.</description>
		<content:encoded><![CDATA[<p>Dans le même genre, il y a les clauses OR:</p>
<p>select titi, tata from table where cond1 or cond2 or cond3;</p>
<p>Visiblement, on peut gagner en réécrivant la requête comme suit:</p>
<p>select titi, tata from table where cond1 UNION \<br />
select titi, tata from table where cond2 UNION \<br />
select titi, tata from table where cond3;</p>
<p>Visiblement, mysql est trop vite tenté par un full table scan sinon.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Arnaud</title>
		<link>http://www.dbnewz.com/2009/11/26/que-signifie-reecrire-une-requete-sql/comment-page-1/#comment-1191</link>
		<dc:creator>Arnaud</dc:creator>
		<pubDate>Fri, 27 Nov 2009 07:39:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbnewz.com/?p=406#comment-1191</guid>
		<description>Sympa ton astuce, à garder en mémoire !</description>
		<content:encoded><![CDATA[<p>Sympa ton astuce, à garder en mémoire !</p>
]]></content:encoded>
	</item>
</channel>
</rss>

