sql >> Database >  >> RDS >> Mysql

Efficiënt samenvoegen over intervalbereiken in SQL

Ik weet niet zeker hoe het intern allemaal werkt, maar afhankelijk van de situatie zou ik adviseren om te spelen met een tafel die alle waarden van d1 'uitrolt' en daar vervolgens aan deel te nemen. Op deze manier kan de query-engine het juiste record 'exact' lokaliseren in plaats van een combinatie van grenzen te moeten vinden die overeenkomen met de waarde waarnaar wordt gezocht.

bijv.

x value
a  1
a  2
a  3
b  5
b  6
b  7
b  8
b  9
b 10
b 11
c 19 etc..

gegeven een index op de waardekolom (**), zou dit een stuk sneller moeten zijn dan samenvoegen met het TUSSEN begin EN einde op de originele d1-tabel IMHO.

Elke keer dat u wijzigingen aanbrengt in d1, moet u natuurlijk ook de uitgerolde tabel aanpassen (trigger?). Als dit vaak gebeurt, besteedt u meer tijd aan het bijwerken van de uitgerolde tabel dan u in de eerste plaats heeft verdiend! Bovendien kan dit nogal wat (schijf)ruimte in beslag nemen als sommige intervallen erg groot zijn; en ook, dit veronderstelt dat we niet hoeven te zoeken naar niet-gehele getallen (bijvoorbeeld wat als we zoeken naar de waarde 3.14?)

(Je zou kunnen overwegen om te experimenteren met een unieke op (waarde, x) hier...)




  1. CAST en IsNumeric

  2. Is er prestatiewinst bij het indexeren van een boolean-veld?

  3. Hoe het mysql root-wachtwoord opnieuw in te stellen?

  4. AVG ophalen waarbij nul- of nulwaarden worden genegeerd