<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <p>Documentation tagged with <strong>indexes</strong> in the Geode graph database. This comprehensive collection covers index design, implementation strategies, performance optimization, maintenance procedures, and best practices for leveraging indexes to accelerate graph queries and ensure optimal database performance.</p> <h3 id="overview" class="position-relative d-flex align-items-center group"> <span>Overview</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="overview" aria-haspopup="dialog" aria-label="Share link: Overview"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>Indexes are the cornerstone of database performance, dramatically reducing query execution time by providing fast access paths to data. In Geode, indexes accelerate node lookups, property searches, relationship traversals, and complex pattern matching operations. Understanding index design and management is essential for building high-performance graph applications.</p> <p>Key benefits of indexes:</p> <ul> <li><strong>Fast Lookups</strong>: O(log n) access instead of O(n) scans</li> <li><strong>Efficient Filtering</strong>: Quick predicate evaluation on indexed properties</li> <li><strong>Relationship Traversals</strong>: Accelerated edge navigation</li> <li><strong>Unique Constraints</strong>: Enforce data integrity at database level</li> <li><strong>Query Optimization</strong>: Enable better execution plans</li> </ul> <h3 id="index-types" class="position-relative d-flex align-items-center group"> <span>Index Types</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-types" aria-haspopup="dialog" aria-label="Share link: Index Types"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="property-indexes" class="position-relative d-flex align-items-center group"> <span>Property Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="property-indexes" aria-haspopup="dialog" aria-label="Share link: Property Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Index individual node or edge properties:</p> <p><strong>Basic Property Index</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">single</span><span class="w"> </span><span class="py">property</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_email_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">email</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Accelerates</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="py">like</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Performance</span><span class="p">:</span><span class="w"> </span><span class="nc">Significantly</span><span class="w"> </span><span class="py">faster</span><span class="w"> </span><span class="py">than</span><span class="w"> </span><span class="py">full</span><span class="w"> </span><span class="py">scans</span><span class="w"> </span><span class="p">(</span><span class="py">workload</span><span class="w"> </span><span class="py">dependent</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Benefits</strong>:</p> <ul> <li>Equality lookups (property = value)</li> <li>Range queries (property &gt; value, property BETWEEN x AND y)</li> <li>Ordering (ORDER BY indexed_property)</li> <li>Existence checks (WHERE property IS NOT NULL)</li> </ul> <h4 id="unique-indexes" class="position-relative d-flex align-items-center group"> <span>Unique Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="unique-indexes" aria-haspopup="dialog" aria-label="Share link: Unique Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Enforce uniqueness while providing fast access:</p> <p><strong>Unique Constraint</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">unique</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">UNIQUE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_id_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">user_id</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Enforces</span><span class="w"> </span><span class="py">constraint</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">No</span><span class="w"> </span><span class="py">two</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="py">nodes</span><span class="w"> </span><span class="py">can</span><span class="w"> </span><span class="py">have</span><span class="w"> </span><span class="py">same</span><span class="w"> </span><span class="py">user_id</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span><span class="py">values</span><span class="w"> </span><span class="py">allowed</span><span class="w"> </span><span class="p">(</span><span class="py">treated</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">distinct</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Provides</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">performance</span><span class="w"> </span><span class="py">benefits</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Accelerates</span><span class="w"> </span><span class="py">lookups</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">12345</span><span class="err">&#39;</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Use Cases</strong>:</p> <ul> <li>Primary keys (user IDs, email addresses)</li> <li>External identifiers (SSN, account numbers)</li> <li>Natural keys (ISBN, SKU)</li> <li>Usernames and handles</li> </ul> <h4 id="composite-indexes" class="position-relative d-flex align-items-center group"> <span>Composite Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="composite-indexes" aria-haspopup="dialog" aria-label="Share link: Composite Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Index multiple properties together:</p> <p><strong>Multi-Column Index</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">composite</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_location_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">city</span><span class="p">,</span><span class="w"> </span><span class="py">state</span><span class="p">,</span><span class="w"> </span><span class="py">country</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Optimizes</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="py">using</span><span class="w"> </span><span class="py">indexed</span><span class="w"> </span><span class="py">prefix</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">✓</span><span class="w"> </span><span class="nc">Efficient</span><span class="p">:</span><span class="w"> </span><span class="nc">Uses</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">fully</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">city</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">Seattle</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">state</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">WA</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">✓</span><span class="w"> </span><span class="py">Efficient</span><span class="p">:</span><span class="w"> </span><span class="nc">Uses</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">city</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">city</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">Seattle</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">✗</span><span class="w"> </span><span class="py">Inefficient</span><span class="p">:</span><span class="w"> </span><span class="nc">Can</span><span class="err">&#39;</span><span class="py">t</span><span class="w"> </span><span class="py">use</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="p">(</span><span class="py">no</span><span class="w"> </span><span class="py">prefix</span><span class="w"> </span><span class="py">match</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">state</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">WA</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Index Prefix Rule</strong>:</p> <p>Composite indexes match queries left-to-right:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Index</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="nc">a</span><span class="p">,</span><span class="w"> </span><span class="py">b</span><span class="p">,</span><span class="w"> </span><span class="py">c</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Can</span><span class="w"> </span><span class="py">optimize</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">WHERE</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">x</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">x</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">b</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">y</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">x</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">b</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">y</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">c</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">z</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Cannot</span><span class="w"> </span><span class="py">optimize</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">WHERE</span><span class="w"> </span><span class="py">b</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">y</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">c</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">z</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">b</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">y</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">c</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">z</span><span class="w"> </span></span></span></code></pre></div> <h4 id="covering-indexes" class="position-relative d-flex align-items-center group"> <span>Covering Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="covering-indexes" aria-haspopup="dialog" aria-label="Share link: Covering Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Include all query columns in index:</p> <p><strong>Index-Only Scans</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">covering</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_profile_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">satisfied</span><span class="w"> </span><span class="py">entirely</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="py">index</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">created_at</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">No</span><span class="w"> </span><span class="py">node</span><span class="w"> </span><span class="py">access</span><span class="w"> </span><span class="py">needed</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Performance</span><span class="p">:</span><span class="w"> </span><span class="nc">2</span><span class="err">-</span><span class="py">5x</span><span class="w"> </span><span class="py">faster</span><span class="w"> </span><span class="py">than</span><span class="w"> </span><span class="py">regular</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span></code></pre></div><p><strong>Design Strategy</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Identify</span><span class="w"> </span><span class="py">frequent</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">pattern</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">User</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">West</span><span class="err">&#39;;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">covering</span><span class="w"> </span><span class="py">index</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Filter</span><span class="w"> </span><span class="py">columns</span><span class="w"> </span><span class="py">first</span><span class="w"> </span><span class="p">(</span><span class="py">status</span><span class="p">,</span><span class="w"> </span><span class="py">region</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Return</span><span class="w"> </span><span class="py">columns</span><span class="w"> </span><span class="py">last</span><span class="w"> </span><span class="p">(</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_active_region_idx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">status</span><span class="p">,</span><span class="w"> </span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="full-text-indexes" class="position-relative d-flex align-items-center group"> <span>Full-Text Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="full-text-indexes" aria-haspopup="dialog" aria-label="Share link: Full-Text Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Search text content efficiently:</p> <p><strong>Text Search Index</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">full</span><span class="err">-</span><span class="py">text</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">FULLTEXT</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">post_content_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Post</span><span class="p">(</span><span class="py">title</span><span class="p">,</span><span class="w"> </span><span class="py">body</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Enables</span><span class="w"> </span><span class="py">text</span><span class="w"> </span><span class="py">search</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Post</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">title</span><span class="w"> </span><span class="py">CONTAINS</span><span class="w"> </span><span class="err">&#39;</span><span class="py">graph</span><span class="w"> </span><span class="py">database</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">body</span><span class="w"> </span><span class="py">CONTAINS</span><span class="w"> </span><span class="err">&#39;</span><span class="py">graph</span><span class="w"> </span><span class="py">database</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">relevance</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Supports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Keyword</span><span class="w"> </span><span class="py">search</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Phrase</span><span class="w"> </span><span class="py">matching</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Relevance</span><span class="w"> </span><span class="py">ranking</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Stemming</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">tokenization</span><span class="w"> </span></span></span></code></pre></div> <h4 id="spatial-indexes" class="position-relative d-flex align-items-center group"> <span>Spatial Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="spatial-indexes" aria-haspopup="dialog" aria-label="Share link: Spatial Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Optimize geographic queries:</p> <p><strong>Geo Index</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">spatial</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">location</span><span class="w"> </span><span class="py">data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">SPATIAL</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">location_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Place</span><span class="p">(</span><span class="py">latitude</span><span class="p">,</span><span class="w"> </span><span class="py">longitude</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Accelerates</span><span class="w"> </span><span class="py">proximity</span><span class="w"> </span><span class="py">queries</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Place</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">distance</span><span class="p">(</span><span class="py">p</span><span class="err">.</span><span class="py">location</span><span class="p">,</span><span class="w"> </span><span class="py">point</span><span class="p">({</span><span class="py">latitude</span><span class="p">:</span><span class="w"> </span><span class="nc">47</span><span class="mf">.6</span><span class="p">,</span><span class="w"> </span><span class="py">longitude</span><span class="p">:</span><span class="w"> </span><span class="err">-</span><span class="nc">122</span><span class="mf">.3</span><span class="p">}))</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">10000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">location</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">distance</span><span class="p">(</span><span class="py">p</span><span class="err">.</span><span class="py">location</span><span class="p">,</span><span class="w"> </span><span class="py">point</span><span class="p">({</span><span class="py">latitude</span><span class="p">:</span><span class="w"> </span><span class="nc">47</span><span class="mf">.6</span><span class="p">,</span><span class="w"> </span><span class="py">longitude</span><span class="p">:</span><span class="w"> </span><span class="err">-</span><span class="nc">122</span><span class="mf">.3</span><span class="p">}))</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Supports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Distance</span><span class="w"> </span><span class="py">calculations</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Bounding</span><span class="w"> </span><span class="py">box</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">K</span><span class="err">-</span><span class="py">nearest</span><span class="w"> </span><span class="py">neighbors</span><span class="w"> </span></span></span></code></pre></div> <h3 id="index-design" class="position-relative d-flex align-items-center group"> <span>Index Design</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-design" aria-haspopup="dialog" aria-label="Share link: Index Design"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="design-principles" class="position-relative d-flex align-items-center group"> <span>Design Principles</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="design-principles" aria-haspopup="dialog" aria-label="Share link: Design Principles"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Cardinality Considerations</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">High</span><span class="w"> </span><span class="py">cardinality</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">excellent</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">email</span><span class="w"> </span><span class="p">(</span><span class="py">millions</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">unique</span><span class="w"> </span><span class="py">values</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">user_id</span><span class="w"> </span><span class="p">(</span><span class="py">all</span><span class="w"> </span><span class="py">unique</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">order_number</span><span class="w"> </span><span class="p">(</span><span class="py">all</span><span class="w"> </span><span class="py">unique</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">UNIQUE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_email_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">email</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Medium</span><span class="w"> </span><span class="py">cardinality</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">good</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">city</span><span class="w"> </span><span class="p">(</span><span class="py">thousands</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">values</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">zip_code</span><span class="w"> </span><span class="p">(</span><span class="py">tens</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">thousands</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">product_category</span><span class="w"> </span><span class="p">(</span><span class="py">hundreds</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_city_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">city</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Low</span><span class="w"> </span><span class="py">cardinality</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">poor</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">candidates</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">gender</span><span class="w"> </span><span class="p">(</span><span class="py">2</span><span class="err">-</span><span class="py">3</span><span class="w"> </span><span class="py">values</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">boolean</span><span class="w"> </span><span class="py">flags</span><span class="w"> </span><span class="p">(</span><span class="py">2</span><span class="w"> </span><span class="py">values</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">status</span><span class="w"> </span><span class="p">(</span><span class="py">3</span><span class="err">-</span><span class="py">5</span><span class="w"> </span><span class="py">values</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Skip</span><span class="w"> </span><span class="py">indexing</span><span class="w"> </span><span class="py">or</span><span class="w"> </span><span class="py">use</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">composite</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span></code></pre></div><p><strong>Selectivity</strong>:</p> <p>Indexes work best when they filter out most rows:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Highly</span><span class="w"> </span><span class="py">selective</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">great</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Returns</span><span class="w"> </span><span class="err">&lt;</span><span class="py">0</span><span class="mf">.1</span><span class="err">%</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">rows</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">specific</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Moderately</span><span class="w"> </span><span class="py">selective</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">good</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Returns</span><span class="w"> </span><span class="err">~</span><span class="py">5</span><span class="err">%</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">rows</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">city</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">Seattle</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Low</span><span class="w"> </span><span class="py">selectivity</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">poor</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Returns</span><span class="w"> </span><span class="err">~</span><span class="py">50</span><span class="err">%</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">rows</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">account_type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">free</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">50</span><span class="err">%</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">users</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="index-selection-strategy" class="position-relative d-flex align-items-center group"> <span>Index Selection Strategy</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-selection-strategy" aria-haspopup="dialog" aria-label="Share link: Index Selection Strategy"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Step 1: Analyze Query Patterns</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="c1">-- Identify frequent queries </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">query_text</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">execution_count</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">avg_duration_ms</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">table_scans</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">FROM</span><span class="w"> </span><span class="k">system</span><span class="p">.</span><span class="n">query_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">WHERE</span><span class="w"> </span><span class="n">table_scans</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">execution_count</span><span class="w"> </span><span class="k">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">LIMIT</span><span class="w"> </span><span class="mi">50</span><span class="p">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Step 2: Identify Filter Columns</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Extract</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">clause</span><span class="w"> </span><span class="py">columns</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="p">:</span><span class="w"> </span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">West</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Candidates</span><span class="p">:</span><span class="w"> </span><span class="nc">region</span><span class="p">,</span><span class="w"> </span><span class="py">status</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="p">:</span><span class="w"> </span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">category</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">Books</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">price</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">20</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Candidates</span><span class="p">:</span><span class="w"> </span><span class="nc">category</span><span class="p">,</span><span class="w"> </span><span class="py">price</span><span class="w"> </span></span></span></code></pre></div><p><strong>Step 3: Prioritize by Impact</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Calculate index impact score</span> </span></span><span class="line"><span class="cl"><span class="n">impact</span> <span class="o">=</span> <span class="n">execution_count</span> <span class="o">*</span> <span class="n">avg_duration</span> <span class="o">*</span> <span class="n">selectivity</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Example:</span> </span></span><span class="line"><span class="cl"><span class="c1"># Query 1: 10,000 executions/day, 500ms avg, 0.01 selectivity</span> </span></span><span class="line"><span class="cl"><span class="c1"># Impact: 10,000 * 500 * 0.01 = 50,000</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Query 2: 1,000 executions/day, 100ms avg, 0.1 selectivity</span> </span></span><span class="line"><span class="cl"><span class="c1"># Impact: 1,000 * 100 * 0.1 = 10,000</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Prioritize Query 1 index</span> </span></span></code></pre></div><p><strong>Step 4: Create Strategic Indexes</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">High</span><span class="err">-</span><span class="py">impact</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="py">first</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_region_status_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">status</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Measure</span><span class="w"> </span><span class="py">improvement</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">EXPLAIN</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">West</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Should</span><span class="w"> </span><span class="py">show</span><span class="p">:</span><span class="w"> </span><span class="nc">Index</span><span class="w"> </span><span class="py">seek</span><span class="w"> </span><span class="py">instead</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">full</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span></span></span></code></pre></div> <h3 id="index-management" class="position-relative d-flex align-items-center group"> <span>Index Management</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-management" aria-haspopup="dialog" aria-label="Share link: Index Management"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="creating-indexes" class="position-relative d-flex align-items-center group"> <span>Creating Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="creating-indexes" aria-haspopup="dialog" aria-label="Share link: Creating Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Syntax</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Basic</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">NodeType</span><span class="p">(</span><span class="py">property</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Unique</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">UNIQUE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">NodeType</span><span class="p">(</span><span class="py">property</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Composite</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">NodeType</span><span class="p">(</span><span class="py">prop1</span><span class="p">,</span><span class="w"> </span><span class="py">prop2</span><span class="p">,</span><span class="w"> </span><span class="py">prop3</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Conditional</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">NodeType</span><span class="p">(</span><span class="py">property</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">condition</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Include</span><span class="w"> </span><span class="py">additional</span><span class="w"> </span><span class="py">columns</span><span class="w"> </span><span class="p">(</span><span class="py">covering</span><span class="w"> </span><span class="py">index</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">NodeType</span><span class="p">(</span><span class="py">filter_prop</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INCLUDE</span><span class="w"> </span><span class="p">(</span><span class="py">return_prop1</span><span class="p">,</span><span class="w"> </span><span class="py">return_prop2</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Online Index Creation</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">without</span><span class="w"> </span><span class="py">blocking</span><span class="w"> </span><span class="py">writes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">CONCURRENTLY</span><span class="w"> </span><span class="py">user_email_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">email</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Progress</span><span class="w"> </span><span class="py">tracking</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">build_progress</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">estimated_completion</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_builds</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">in_progress</span><span class="err">&#39;;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="monitoring-indexes" class="position-relative d-flex align-items-center group"> <span>Monitoring Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="monitoring-indexes" aria-haspopup="dialog" aria-label="Share link: Monitoring Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Index Usage Statistics</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">View</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">usage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">table_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_scans</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">rows_read</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_scan_time</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_size_mb</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">index_scans</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Unused Indexes</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="py">that</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">never</span><span class="w"> </span><span class="py">used</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">table_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_size_mb</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">index_scans</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">&#39;</span><span class="py">30</span><span class="w"> </span><span class="py">days</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">index_size_mb</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Index Efficiency</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Identify</span><span class="w"> </span><span class="py">inefficient</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">table_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_scans</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">rows_read</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">NULLIF</span><span class="p">(</span><span class="py">index_scans</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_rows_per_scan</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_size_mb</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">index_scans</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">rows_read</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">NULLIF</span><span class="p">(</span><span class="py">index_scans</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">1000</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Low</span><span class="w"> </span><span class="py">selectivity</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">avg_rows_per_scan</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="index-maintenance" class="position-relative d-flex align-items-center group"> <span>Index Maintenance</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-maintenance" aria-haspopup="dialog" aria-label="Share link: Index Maintenance"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Rebuild Fragmented Indexes</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">health</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">fragment</span><span class="nc">ation_percent</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">page_count</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_rebuild_time</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_health</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="kd">fragment</span><span class="nc">ation_percent</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">30</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Rebuild</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">REINDEX</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_email_idx</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Rebuild</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">table</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">REINDEX</span><span class="w"> </span><span class="py">TABLE</span><span class="w"> </span><span class="py">User</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Update Statistics</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Refresh</span><span class="w"> </span><span class="py">optimizer</span><span class="w"> </span><span class="py">statistics</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ANALYZE</span><span class="w"> </span><span class="py">User</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Full</span><span class="w"> </span><span class="py">database</span><span class="w"> </span><span class="py">analysis</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ANALYZE</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">statistics</span><span class="w"> </span><span class="py">freshness</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">table_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_analyze_time</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">row_count</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">mod_count</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">table_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">last_analyze_time</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">&#39;</span><span class="py">7</span><span class="w"> </span><span class="py">days</span><span class="err">&#39;;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="dropping-indexes" class="position-relative d-flex align-items-center group"> <span>Dropping Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="dropping-indexes" aria-haspopup="dialog" aria-label="Share link: Dropping Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Remove Unused Indexes</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Drop</span><span class="w"> </span><span class="py">single</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">DROP</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_old_idx</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Drop</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">exists</span><span class="w"> </span><span class="p">(</span><span class="py">safe</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">DROP</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">IF</span><span class="w"> </span><span class="py">EXISTS</span><span class="w"> </span><span class="py">user_old_idx</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Drop</span><span class="w"> </span><span class="py">multiple</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">DROP</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_idx1</span><span class="p">,</span><span class="w"> </span><span class="py">user_idx2</span><span class="p">,</span><span class="w"> </span><span class="py">user_idx3</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Impact Analysis Before Dropping</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">what</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="py">use</span><span class="w"> </span><span class="py">an</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="py">DISTINCT</span><span class="w"> </span><span class="kd">query</span><span class="nc">_text</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="kd">query</span><span class="nc">_plans</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user_region_idx</span><span class="err">&#39;;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="performance-optimization" class="position-relative d-flex align-items-center group"> <span>Performance Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-optimization" aria-haspopup="dialog" aria-label="Share link: Performance Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="index-selection-by-query-optimizer" class="position-relative d-flex align-items-center group"> <span>Index Selection by Query Optimizer</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-selection-by-query-optimizer" aria-haspopup="dialog" aria-label="Share link: Index Selection by Query Optimizer"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>How Optimizer Chooses Indexes</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">multiple</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">candidates</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">West</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Available</span><span class="w"> </span><span class="py">indexes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">1</span><span class="err">.</span><span class="w"> </span><span class="py">user_region_idx</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="p">(</span><span class="py">region</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">2</span><span class="err">.</span><span class="w"> </span><span class="py">user_email_idx</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="p">(</span><span class="py">email</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Optimizer</span><span class="w"> </span><span class="py">chooses</span><span class="w"> </span><span class="py">user_email_idx</span><span class="w"> </span><span class="py">because</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Higher</span><span class="w"> </span><span class="py">selectivity</span><span class="w"> </span><span class="p">(</span><span class="py">unique</span><span class="w"> </span><span class="py">email</span><span class="w"> </span><span class="py">vs</span><span class="w"> </span><span class="py">common</span><span class="w"> </span><span class="py">region</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Faster</span><span class="w"> </span><span class="py">lookup</span><span class="w"> </span><span class="p">(</span><span class="py">1</span><span class="w"> </span><span class="py">row</span><span class="w"> </span><span class="py">vs</span><span class="w"> </span><span class="py">many</span><span class="w"> </span><span class="py">rows</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Force Index Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Force</span><span class="w"> </span><span class="py">specific</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">hint</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">USING</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_region_idx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">West</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="index-vs-table-scan-decision" class="position-relative d-flex align-items-center group"> <span>Index vs. Table Scan Decision</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-vs-table-scan-decision" aria-haspopup="dialog" aria-label="Share link: Index vs. Table Scan Decision"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Cost-Based Optimization</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">When</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">used</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Cost</span><span class="p">:</span><span class="w"> </span><span class="nc">Index</span><span class="w"> </span><span class="py">seek</span><span class="w"> </span><span class="p">(</span><span class="py">3</span><span class="w"> </span><span class="py">I</span><span class="err">/</span><span class="py">Os</span><span class="p">)</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">row</span><span class="w"> </span><span class="py">fetch</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">4</span><span class="w"> </span><span class="py">I</span><span class="err">/</span><span class="py">Os</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">When</span><span class="w"> </span><span class="py">table</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">used</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">account_type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">premium</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">50</span><span class="err">%</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">rows</span><span class="w"> </span><span class="py">match</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Cost</span><span class="p">:</span><span class="w"> </span><span class="nc">Index</span><span class="w"> </span><span class="py">seek</span><span class="w"> </span><span class="p">(</span><span class="py">3</span><span class="w"> </span><span class="py">I</span><span class="err">/</span><span class="py">Os</span><span class="p">)</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">500</span><span class="p">,</span><span class="py">000</span><span class="w"> </span><span class="py">row</span><span class="w"> </span><span class="py">fetches</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">500</span><span class="p">,</span><span class="py">003</span><span class="w"> </span><span class="py">I</span><span class="err">/</span><span class="py">Os</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">vs</span><span class="w"> </span><span class="py">Table</span><span class="w"> </span><span class="py">scan</span><span class="p">:</span><span class="w"> </span><span class="nc">10</span><span class="p">,</span><span class="py">000</span><span class="w"> </span><span class="py">page</span><span class="w"> </span><span class="py">reads</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">10</span><span class="p">,</span><span class="py">000</span><span class="w"> </span><span class="py">I</span><span class="err">/</span><span class="py">Os</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Optimizer</span><span class="w"> </span><span class="py">chooses</span><span class="w"> </span><span class="py">table</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span><span class="p">(</span><span class="py">cheaper</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div> <h4 id="composite-index-optimization" class="position-relative d-flex align-items-center group"> <span>Composite Index Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="composite-index-optimization" aria-haspopup="dialog" aria-label="Share link: Composite Index Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Column Order Matters</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">pattern</span><span class="p">:</span><span class="w"> </span><span class="nc">Filter</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">status</span><span class="p">,</span><span class="w"> </span><span class="py">then</span><span class="w"> </span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">then</span><span class="w"> </span><span class="py">created_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">West</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="err">&#39;</span><span class="py">2025</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Optimal</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">order</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="nc">1</span><span class="err">.</span><span class="w"> </span><span class="py">Most</span><span class="w"> </span><span class="py">selective</span><span class="w"> </span><span class="py">first</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_composite_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">status</span><span class="p">,</span><span class="w"> </span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Or</span><span class="w"> </span><span class="py">prioritize</span><span class="w"> </span><span class="py">equality</span><span class="w"> </span><span class="py">over</span><span class="w"> </span><span class="py">range</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_composite_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">status</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Equality</span><span class="w"> </span><span class="p">(</span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">status</span><span class="p">)</span><span class="w"> </span><span class="py">then</span><span class="w"> </span><span class="py">range</span><span class="w"> </span><span class="p">(</span><span class="py">created_at</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div> <h3 id="best-practices" class="position-relative d-flex align-items-center group"> <span>Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="best-practices" aria-haspopup="dialog" aria-label="Share link: Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="index-design-guidelines" class="position-relative d-flex align-items-center group"> <span>Index Design Guidelines</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-design-guidelines" aria-haspopup="dialog" aria-label="Share link: Index Design Guidelines"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>DO</strong>:</p> <ul> <li>Index primary keys and foreign keys</li> <li>Index columns frequently in WHERE clauses</li> <li>Index columns used in JOIN conditions</li> <li>Index columns in ORDER BY clauses</li> <li>Use composite indexes for multi-column filters</li> <li>Include covering columns for hot queries</li> <li>Monitor index usage and remove unused indexes</li> </ul> <p><strong>DON&rsquo;T</strong>:</p> <ul> <li>Over-index (each index slows writes)</li> <li>Index low-cardinality columns alone</li> <li>Create redundant indexes</li> <li>Index columns rarely queried</li> <li>Forget to update statistics</li> <li>Ignore index fragmentation</li> </ul> <h4 id="write-performance-considerations" class="position-relative d-flex align-items-center group"> <span>Write Performance Considerations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="write-performance-considerations" aria-haspopup="dialog" aria-label="Share link: Write Performance Considerations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Index Overhead</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Each</span><span class="w"> </span><span class="py">write</span><span class="w"> </span><span class="py">operation</span><span class="w"> </span><span class="py">updates</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Node</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">5</span><span class="w"> </span><span class="py">indexes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">12345</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">Alice</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">city</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">Seattle</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">timestamp</span><span class="p">()</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Updates</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="nc">1</span><span class="err">.</span><span class="w"> </span><span class="py">Primary</span><span class="w"> </span><span class="py">table</span><span class="w"> </span><span class="py">storage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">2</span><span class="err">.</span><span class="w"> </span><span class="py">user_id_idx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">3</span><span class="err">.</span><span class="w"> </span><span class="py">email_idx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">4</span><span class="err">.</span><span class="w"> </span><span class="py">name_idx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">5</span><span class="err">.</span><span class="w"> </span><span class="py">city_idx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">6</span><span class="err">.</span><span class="w"> </span><span class="py">created_at_idx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Total</span><span class="p">:</span><span class="w"> </span><span class="nc">6</span><span class="w"> </span><span class="py">write</span><span class="w"> </span><span class="py">operations</span><span class="w"> </span></span></span></code></pre></div><p><strong>Batch Operations</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Disable</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="py">during</span><span class="w"> </span><span class="py">bulk</span><span class="w"> </span><span class="py">load</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_email_idx</span><span class="w"> </span><span class="py">DISABLE</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Load</span><span class="w"> </span><span class="py">data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LOAD</span><span class="w"> </span><span class="py">CSV</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="err">&#39;</span><span class="py">users</span><span class="err">.</span><span class="py">csv</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">row</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="nc">row</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="nc">row</span><span class="err">.</span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="kd">...</span><span class="p">})</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Rebuild</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_email_idx</span><span class="w"> </span><span class="py">REBUILD</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="index-monitoring-workflow" class="position-relative d-flex align-items-center group"> <span>Index Monitoring Workflow</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-monitoring-workflow" aria-haspopup="dialog" aria-label="Share link: Index Monitoring Workflow"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Weekly Review</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">1</span><span class="err">.</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">unused</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span><span class="py">index_size_mb</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">index_scans</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">&#39;</span><span class="py">30</span><span class="w"> </span><span class="py">days</span><span class="err">&#39;;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">2</span><span class="err">.</span><span class="w"> </span><span class="py">Identify</span><span class="w"> </span><span class="py">missing</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="kd">query</span><span class="nc">_text</span><span class="p">,</span><span class="w"> </span><span class="py">execution_count</span><span class="p">,</span><span class="w"> </span><span class="py">avg_duration_ms</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="kd">query</span><span class="nc">_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">table_scans</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">execution_count</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">execution_count</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">avg_duration_ms</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">20</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">3</span><span class="err">.</span><span class="w"> </span><span class="py">Review</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">health</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span><span class="kd">fragment</span><span class="nc">ation_percent</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_health</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="kd">fragment</span><span class="nc">ation_percent</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">30</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">4</span><span class="err">.</span><span class="w"> </span><span class="py">Update</span><span class="w"> </span><span class="py">statistics</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ANALYZE</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="advanced-techniques" class="position-relative d-flex align-items-center group"> <span>Advanced Techniques</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="advanced-techniques" aria-haspopup="dialog" aria-label="Share link: Advanced Techniques"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="partial-indexes" class="position-relative d-flex align-items-center group"> <span>Partial Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="partial-indexes" aria-haspopup="dialog" aria-label="Share link: Partial Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Index subset of rows:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="kd">on</span><span class="py">ly</span><span class="w"> </span><span class="py">active</span><span class="w"> </span><span class="py">users</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">active_users_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">email</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Much</span><span class="w"> </span><span class="py">smaller</span><span class="w"> </span><span class="py">than</span><span class="w"> </span><span class="py">full</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Faster</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">active</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="kd">on</span><span class="py">ly</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="expression-indexes" class="position-relative d-flex align-items-center group"> <span>Expression Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="expression-indexes" aria-haspopup="dialog" aria-label="Share link: Expression Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Index computed values:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="py">lowercase</span><span class="w"> </span><span class="py">email</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">case</span><span class="err">-</span><span class="py">insensitive</span><span class="w"> </span><span class="py">search</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_email_lower_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">LOWER</span><span class="p">(</span><span class="py">email</span><span class="p">))</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Enables</span><span class="w"> </span><span class="py">fast</span><span class="w"> </span><span class="py">case</span><span class="err">-</span><span class="py">insensitive</span><span class="w"> </span><span class="py">lookup</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">LOWER</span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">LOWER</span><span class="p">(</span><span class="err">&#39;</span><span class="py">User</span><span class="nd">@Example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="index-organized-tables" class="position-relative d-flex align-items-center group"> <span>Index-Organized Tables</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-organized-tables" aria-haspopup="dialog" aria-label="Share link: Index-Organized Tables"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Store table data in index order:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">table</span><span class="w"> </span><span class="py">ordered</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Event</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">event_id</span><span class="w"> </span><span class="py">UUID</span><span class="w"> </span><span class="py">PRIMARY</span><span class="w"> </span><span class="py">KEY</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">event_type</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">JSON</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="w"> </span><span class="py">CLUSTERED</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="p">(</span><span class="py">timestamp</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Range</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">extremely</span><span class="w"> </span><span class="py">fast</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">e</span><span class="p">:</span><span class="nc">Event</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">e</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="err">&#39;</span><span class="py">2025</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">e</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="err">&#39;</span><span class="py">2025</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">31</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">e</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">e</span><span class="err">.</span><span class="py">timestamp</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">No</span><span class="w"> </span><span class="py">sort</span><span class="w"> </span><span class="py">needed</span><span class="p">,</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">already</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">order</span><span class="w"> </span></span></span></code></pre></div> <h3 id="troubleshooting" class="position-relative d-flex align-items-center group"> <span>Troubleshooting</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="troubleshooting" aria-haspopup="dialog" aria-label="Share link: Troubleshooting"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="index-not-being-used" class="position-relative d-flex align-items-center group"> <span>Index Not Being Used</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-not-being-used" aria-haspopup="dialog" aria-label="Share link: Index Not Being Used"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Diagnosis</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">execution</span><span class="w"> </span><span class="py">plan</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">EXPLAIN</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">If</span><span class="w"> </span><span class="py">showing</span><span class="w"> </span><span class="py">table</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span><span class="py">instead</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">seek</span><span class="p">:</span><span class="w"> </span></span></span></code></pre></div><p><strong>Common Causes</strong>:</p> <ol> <li><strong>Function on indexed column</strong>:</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="err">✗</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">used</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">LOWER</span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">✓</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="py">used</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><ol start="2"> <li><strong>Type mismatch</strong>:</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="err">✗</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">used</span><span class="w"> </span><span class="p">(</span><span class="py">string</span><span class="w"> </span><span class="py">vs</span><span class="w"> </span><span class="py">integer</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">user_id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">12345</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">user_id</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">string</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">✓</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="py">used</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">user_id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">12345</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><ol start="3"> <li><strong>Stale statistics</strong>:</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Update</span><span class="w"> </span><span class="py">optimizer</span><span class="w"> </span><span class="py">statistics</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ANALYZE</span><span class="w"> </span><span class="py">User</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="slow-index-scans" class="position-relative d-flex align-items-center group"> <span>Slow Index Scans</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="slow-index-scans" aria-haspopup="dialog" aria-label="Share link: Slow Index Scans"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Issue</strong>: Index exists but queries still slow.</p> <p><strong>Solutions</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">1</span><span class="err">.</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">selectivity</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">rows_read</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">NULLIF</span><span class="p">(</span><span class="py">index_scans</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_rows_per_scan</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">problematic_idx</span><span class="err">&#39;;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">High</span><span class="w"> </span><span class="py">avg_rows_per_scan</span><span class="w"> </span><span class="py">indicates</span><span class="w"> </span><span class="py">low</span><span class="w"> </span><span class="py">selectivity</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">2</span><span class="err">.</span><span class="w"> </span><span class="py">Consider</span><span class="w"> </span><span class="py">composite</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">better</span><span class="w"> </span><span class="py">selectivity</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">better_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">status</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">3</span><span class="err">.</span><span class="w"> </span><span class="py">Use</span><span class="w"> </span><span class="py">covering</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">avoid</span><span class="w"> </span><span class="py">row</span><span class="w"> </span><span class="py">fetches</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">covering_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">region</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INCLUDE</span><span class="w"> </span><span class="p">(</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="integration-with-geode" class="position-relative d-flex align-items-center group"> <span>Integration with Geode</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="integration-with-geode" aria-haspopup="dialog" aria-label="Share link: Integration with Geode"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Indexes integrate seamlessly with Geode features:</p> <ul> <li><strong>Query Optimizer</strong>: Automatic index selection for optimal plans</li> <li><strong>EXPLAIN Command</strong>: Shows index usage in execution plans</li> <li><strong>Transactions</strong>: Indexes updated atomically within transactions</li> <li><strong>Concurrency</strong>: Online index creation without blocking writes</li> <li><strong>Monitoring</strong>: Built-in index usage and health metrics</li> <li><strong>Security</strong>: RLS policies work efficiently with indexes</li> </ul> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><strong>Query Optimization</strong>: Using indexes for better performance</li> <li><strong>Query Performance</strong>: Index impact on throughput and latency</li> <li><strong>EXPLAIN Command</strong>: Analyzing index usage in query plans</li> <li><strong>Schema Design</strong>: Designing schemas with indexing in mind</li> <li><strong>Best Practices</strong>: Index design and management best practices</li> <li><strong>Monitoring</strong>: Tracking index usage and performance</li> </ul> <hr> <p>Browse the tagged content below to discover comprehensive guides, tutorials, and best practices for indexes in Geode. Learn how to design, create, and manage indexes that dramatically improve query performance and scale your graph database applications to production workloads.</p>

Related Articles