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