sql >> Databáze >  >> RDS >> Mysql

Efektivní spojování přes intervaly v SQL

Nejsem si jistý, jak to všechno interně funguje, ale v závislosti na situaci bych doporučil pohrát si s tabulkou, která „vyroluje“ všechny hodnoty z d1, a pak se k ní připojit. Tímto způsobem může dotazovací modul určit správný záznam „přesně“ namísto toho, aby musel hledat kombinaci hranic, které odpovídají hledané hodnotě.

např.

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..

vzhledem k indexu ve sloupci hodnoty (**) by to mělo být o něco rychlejší než spojení s BETWEEN start AND end na původní tabulce d1 IMHO.

Samozřejmě, pokaždé, když provedete změny v d1, budete muset upravit i vysunutou tabulku (spouštěč?). Pokud k tomu dochází často, strávíte aktualizací zavedené tabulky více času, než jste původně získali! Navíc to může rychle zabrat dost místa (na disku), pokud jsou některé intervaly opravdu velké; a také to předpokládá, že nepotřebujeme hledat jiná než celá čísla (např. co když hledáme hodnotu 3,14?)

(Mohli byste zvážit experimentování s jedinečným na (hodnota, x) zde...)




  1. Operátoři T-SQL SET Část 2:INTERSECT a EXCEPT

  2. Žádná podpora pro OVER v MS SQL Server 2005?

  3. Jak mohu v Oracle zkombinovat více řádků do seznamu odděleného čárkami?

  4. Funkce ASCIISTR() v Oracle