<?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>Wed, 28 Jul 2010 14:54:42 +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-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>
