Wir müssen priority
einer Tabelle eine Spalte hinzufügen , die ungefähr 250 Mal pro Sekunde getroffen wird, ungefähr 170 Auswahlen, 125 Einfügungen und 60 Aktualisierungen. Die Spalte wird einfach sein number(1)
.
Dies priority
spielt keine Rolle für die Einfügungen oder Aktualisierungen, dh nicht Teil des Primärschlüssels, den ich separat erzwingen werde.
Grundsätzlich möchten wir nicht order by
170 Mal pro Sekunde einen Scan über einen Bereich durchführen müssen, da die ausgeführte Zahl massiv abfällt.
Gewährleistet eine indexorganisierte Tabelle , priority = 1
die beim Ausführen der folgenden Abfrage immer vorher kommt priority = 9
:
select *
from my_table
where rownum < 2
Für etwas mehr Kontext wäre eine typische Abfrage:
select *
from my_table
where mod(to_number(to_char(tstamp,'ss')),1) = 0
and done is null
and country = 'gbr'
and rownum < 2
Die pk-Einschränkung für das IOT würde priority, rest of the pk
mit einer separaten Einschränkung für das pk nur für die Struktur werden. done
ist in ungefähr 99% der Tabelle null, daher ist dies sowieso nicht sehr selektiv.
Ich denke, der Hauptindex ist, dass country, done, to_number(to_char(tstamp,'ss')
wir ungefähr 20 Kombinationen getestet haben, und dieser hat sich bei weitem durchgesetzt.
Ich bin überhaupt nicht bereit, diesen Abfragen eine Zeit hinzuzufügen. 0,01 pro Tag, der von select hinzugefügt wird, beträgt 41 Minuten pro Tag. Wir geben uns lieber mit "gut genug" als mit Perfektion zufrieden.
priority
, das IOT als führende Spalte hinzuzufügen ?
ORDER BY priority
(wie in Jacks Beispiel), werden IhreSELECT
Abfragen viel langsamer ausgeführt? Welche Indizes haben Sie auf dem Tisch?