Mysql
 sql >> база данни >  >> RDS >> Mysql

Ефективно търсене в таблица с диапазони

Като се има предвид, че вече имате индекс на ip_start , това е как да го използвате най-добре, ако приемем, че искате да направите един достъп на IP (1234 в този пример):

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

Това ще използва вашия индекс, за да започне сканиране, което спира незабавно поради limit 1 . Цената трябва да бъде само малко по-висока от тази на обикновен индексиран достъп. Разбира се, тази техника разчита на факта, че диапазоните, дефинирани от ip_start и ip_end никога не се припокриват.

Проблемът с вашия първоначален подход е, че mysql, тъй като не знае за това ограничение, може да използва само индекса, за да определи къде да започне или спре сканирането, което (той смята), че му е необходимо, за да намери всички съвпадения за вашата заявка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MAKEDATE() Примери – MySQL

  2. Как да създадете база данни в MySQL Workbench с помощта на GUI

  3. Групирайте по месеци и върнете 0, ако данните не бъдат намерени

  4. mysql NULL стойност в where в CLAUSE

  5. Как да избегнем дубликати, докато актуализираме MySQL база данни?