zondag 22 juli 2012

Op welke database kolommen zijn een index zinvol

Om mijn database performantie (Oracle 10g) een beetje te tunen heb ik een aantal veelvoorkomende SQL queries nagekeken in mijn Navicat.
(Ben trouwens harde fan van Navicat als database beheer programma, vooral omdat het bijna alles ondersteund. Vroeger gebruikte ik per database een apart programma, nu dus eentje die zowel Postgress, Oracle, Sql server en Mysql tegelijk doet.-

Ik kon daarbij vaststellen dat er voor een aantal zaken full table searches moesten gedaan worden. In de hoop dat deze wat sneller kunnen ben ik wat gaan nalezen over indexen leggen.

Hierbij leerde ik dat je best indexes legt als
  • het gewenste resultaat minder dan 15% van aantal records van de tabel is
  • zoeken in tabellen met veel records (ik interpreteer dit als meer dan 10.000 records)
  • op een kolom die quasi uniek is. Op unieke kolommen ligt meestal al een primary key waardoor deze reeds geindexeerd is.
  • in de kolom zijn er dus zeer veel mogelijkheden. Als dit niet is kan je een bitmap index overwergen
  • je regelmatig op de kolom zoekt waar deze leeg (null) is. Je mag zeker geen index leggen als het veel null is en je er ook nooit naar zoekt.