sql >> Database >  >> RDS >> PostgreSQL

Bij welke kardinaliteit schakelt SQL Server over naar een indexscan (vs. zoeken)

In termen van SQL Server wordt dit het kantelpunt genoemd, waarvan de blogpost van Kimberley goed is om erover te lezen. http://www.sqlskills.com/BLOGS/KIMBERLY /category/The-Tipping-Point.aspx

Het omslagpunt is een richtlijn van 25%-33% van het totale aantal pagina's in de tabel, uitgedrukt in rijen, bijv. 10k datapagina's zouden een omslagpunt van 2500-3333 rijen geven. Volgens de richtlijnen is dit best goed, en zo goed als je kunt krijgen - onthoud dat de queryplan-engine een zwarte doos is, en hoewel het je een queryplan zal geven, zegt het alleen wat het heeft besloten, niet waarom.

In termen van het tippen van een dekkingsindex is dat echter niet zo eenvoudig, zelfs als 100% van de gegevens is geselecteerd, zoekt een dekkingsindex in de meeste gevallen nog steeds een overscan.

Dat is logisch, als je bedenkt dat de kostenoptimalisator geen echte kosten toewijst aan de hiërarchie van indexpagina's, maar alleen de toegang tot de bladpagina's van de index. Op dat moment kost het scannen of zoeken naar 100% van een dekkingsindex hetzelfde.

Ik vond uit mijn eigen experimenten (http://sqlfascination.com/2009/11/07/can-a-covering-nc-index-be-tipped ) het gebruik van een tussenclausule zou ervoor zorgen dat het werd gescand, maar andere waar-clausules niet - van wat ik kon zien was het puur de route door de query-engine.



  1. Hoe selecteer je een rij met maximale waarde voor een kolom in MySQL?

  2. Laravel 5 + PostgreSQL:Database [postgres] niet geconfigureerd. Fout

  3. Hoe stel je de schemanaam in voor reeksen tijdens de implementatie bij gebruik van JPA?

  4. Oracle-verbindingspoolklasse