<?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>Oracle - Concepts et Exemples &#187; index</title>
	<atom:link href="https://blog.developpez.com/pachot/tag/index/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/pachot</link>
	<description>Les fonctionalités et concepts d&#039;Oracle à partir de traductions et de démos</description>
	<lastBuildDate>Sun, 03 Apr 2016 20:36:21 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>12c: Index partiel sur tables partitionnées</title>
		<link>https://blog.developpez.com/pachot/12c_partial_index/</link>
		<comments>https://blog.developpez.com/pachot/12c_partial_index/#comments</comments>
		<pubDate>Fri, 27 Sep 2013 06:00:23 +0000</pubDate>
		<dc:creator><![CDATA[pachot]]></dc:creator>
				<category><![CDATA[12c]]></category>
		<category><![CDATA[index]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/pachot/?p=756</guid>
		<description><![CDATA[On n&#8217;a pas toujours besoin d&#8217;indexer toutes les partitions. Dans une table qui garde tout l&#8217;historique, on peut avoir le besoin de n&#8217;indexer que la partition courante, accédées en transactionnel. Les anciennes partitions ont toujours les données, pour des besoins &#8230; <a href="https://blog.developpez.com/pachot/12c_partial_index/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>On n&rsquo;a pas toujours besoin d&rsquo;indexer toutes les partitions. Dans une table qui garde tout l&rsquo;historique, on peut avoir le besoin de n&rsquo;indexer que la partition courante, accédées en transactionnel. Les anciennes partitions ont toujours les données, pour des besoins de reporting, mais sans devoir stocker tous les index utiles à la partition courante.<br />
Avant la 12c, on peut faire ça avec des index locaux en les rendant unusable (et skip_unusable_indexes=true). Mais pas de solution pour les index globaux &#8211; sinon archiver les anciennes lignes dans une autre table et faire une vue UNION ALL.</p>
<p>En 12c, on peut peut avoir des index partiels:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CREATE INDEX ... GLOBAL INDEXING PARTIAL<br />
CREATE INDEX ... LOCAL INDEXING PARTIAL</div></div>
<p>Et on précise au niveau de la tables les partitions qui ne seront pas indexées par les Partial Index:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ALTER TABLE ... MODIFY PARTITION ... INDEXING OFF</div></div>
<p>Le résultat:</p>
<ul>
<li>Les Partial Local Index auront leur partitions en &lsquo;indexing off&rsquo; au status UNUSABLE (donc garder la valeur par défaut skip_unusable_indexes=true)</li>
<li>Les Partial Global Index n&rsquo;auront pas d&rsquo;entrée pour les lignes des partitions en &lsquo;indexing off&rsquo;. S&rsquo;il y en avait auparavant, elles deviendront <a href="http://blog.developpez.com/pachot/12c_global_index_maintenance/" target="_blank">orphelines</a></li>
</ul>
<p>L&rsquo;opération inverse elle devra reconstruire les partitions locales, et réindexer les index globaux pour ces partitions.</p>
<p>C&rsquo;est transparent: les SELECT qui utilisent l&rsquo;index feront un UNION ALL pour aller chercher les données indexées via index, et les autres via partition full scan.<br />
Par exemple, lorsque la partition 1 est en &lsquo;indexing off&rsquo;, la partition 2 en &lsquo;indexing on&rsquo;, et l&rsquo;index global en &lsquo;indexing partial':</p>
<pre>------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                    | Name    | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                             |         |     1 |     8 |    32   (0)| 00:00:01 |       |       |
|   1 |  VIEW                                        | VW_TE_2 |     2 |    52 |    32   (0)| 00:00:01 |       |       |
|   2 |   UNION-ALL                                  |         |       |       |            |          |       |       |
|*  3 |    TABLE ACCESS BY GLOBAL INDEX ROWID BATCHED| TEST    |     1 |     8 |     2   (0)| 00:00:01 |     2 |     2 |
|*  4 |     INDEX RANGE SCAN                         | TEST_N  |     1 |       |     1   (0)| 00:00:01 |       |       |
|   5 |    PARTITION LIST SINGLE                     |         |     1 |     8 |    30   (0)| 00:00:01 |     1 |     1 |
|*  6 |     TABLE ACCESS FULL                        | TEST    |     1 |     8 |    30   (0)| 00:00:01 |     1 |     1 |
------------------------------------------------------------------------------------------------------------------------</pre>
<p><ins datetime="2013-09-24T12:34:23+00:00">L&rsquo;exemple complet dans la <a href="http://ora-demo.pachot.net/12c_partial_index.html" title="demo" target="_blank">demo</a></ins></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>12c: Indexer les mêmes colonnes avec différents types d&#8217;index</title>
		<link>https://blog.developpez.com/pachot/12c_index_on_same_column/</link>
		<comments>https://blog.developpez.com/pachot/12c_index_on_same_column/#comments</comments>
		<pubDate>Mon, 15 Jul 2013 06:00:37 +0000</pubDate>
		<dc:creator><![CDATA[pachot]]></dc:creator>
				<category><![CDATA[12c]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[online]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/pachot/?p=490</guid>
		<description><![CDATA[La 11g avait apporté les index invisibles: on peut créer des index qui sont maintenus, mais ne sont pas utilisés par les requêtes. Pour pouvoir les tester par exemple. Mais il était toujours impossible de tester un différent type d&#8217;index &#8230; <a href="https://blog.developpez.com/pachot/12c_index_on_same_column/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>La 11g avait apporté les index invisibles: on peut créer des index qui sont maintenus, mais ne sont pas utilisés par les requêtes. Pour pouvoir les tester par exemple.<br />
Mais il était toujours impossible de tester un différent type d&rsquo;index sur des colonnes déjà indexées (pour le passer en bitmap, en reverse, le compresser,&#8230;).<br />
L&rsquo;erreur était:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ORA-01408:&nbsp; such column list already indexed<br />
Cause:&nbsp; A CREATE INDEX statement specified a column that is already indexed. A single column may be indexed only once. Additional indexes may be created on the column if it is used as a portion of a concatenated index, that is, if the index consists of multiple columns.<br />
Action: Do not attempt to re-index the column, as it is unnecessary. To create a concatenated key, specify one or more additional columns in the CREATE INDEX statement.</div></div>
<p>En 12c, cette restriction est levée dans le cas où l&rsquo;index que l&rsquo;on crée est invisible.<br />
Par exemple, je n&rsquo;ai pas d&rsquo;erreur en exécutant ceci:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">create unique index TEST1 on TEST(num) ;<br />
create unique index TEST2 on TEST(num) reverse invisible;</div></div>
<p>On a donc 2 index sur les mêmes colonnes. Ils sont maintenus (donc utilisables) mais un seul n&rsquo;est utilisé: celui qui est visible.<br />
Il est facile de passer de l&rsquo;un à l&rsquo;autre en changeant leur visibilité: c&rsquo;est une opération online (pas de verrou).</p>
<p>Deux gros avantage: </p>
<ul>
<li>créer un index peut être long. On peut le faire online, mais le fait de devoir supprimer l&rsquo;ancien avant nous laissait un certain temps dans index.</li>
<li>si on ne le crée pas online, la création du nouvel index peut être très rapide car elle utilise l&rsquo;ancien.</li>
</ul>
<p>On a donc le choix: maximiser la disponibilité de l&rsquo;application en le créant online, ou minimiser le temps de création de l&rsquo;index.</p>
<p>Si l&rsquo;index supporte une contrainte d&rsquo;intégrité, c&rsquo;est un peu plus complexe. <ins datetime="2013-07-06T07:19:45+00:00"><br />
Le détail dans la <a href="http://ora-demo.pachot.net/12c_index_on_same_column.html" title="demo" target="_blank">demo</a> </ins> avec une introduction sur de nouvelles opérations online apportées par la 12c (drop index et drop constraint). </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
