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

Efektivní vyhledávání v tabulce rozsahů

Vzhledem k tomu, že již máte index na ip_start , to je způsob, jak jej používat nejlépe, za předpokladu, že chcete provést jeden přístup na IP (1234 v tomto příkladu):

select organization from (
    select ip_end, organization
    from iptable
    where ip_start <= 1234
    order by ip_start desc
    limit 1
) subqry where 1234 <= ip_end

To použije váš index ke spuštění skenování, které se okamžitě zastaví kvůli limit 1 . Náklady by měly být jen nepatrně vyšší než náklady na jednoduchý indexovaný přístup. Tato technika samozřejmě spoléhá na skutečnost, že rozsahy jsou definovány ip_start a ip_end nikdy se nepřekrývají.

Problém s vaším původním přístupem je v tom, že mysql, který si tohoto omezení není vědom, může použít index pouze k určení, kde začít nebo zastavit skenování, které (si myslí), že potřebuje k nalezení všech shod pro váš dotaz.



  1. SQL Server SHOWPLAN_ALL

  2. Jarní aplikace ztrácí připojení k MySql po 8 hodinách. Jak správně nakonfigurovat?

  3. Oracle sql:aktualizujte, pokud existuje else insert

  4. Vytváření plánů údržby databáze