Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pencarian yang efisien dalam tabel rentang

Mengingat Anda sudah memiliki indeks di ip_start , ini adalah cara terbaik untuk menggunakannya, dengan asumsi Anda ingin membuat satu akses per IP (1234 dalam contoh ini):

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

Ini akan menggunakan indeks Anda untuk memulai pemindaian yang segera berhenti karena limit 1 . Biayanya seharusnya hanya sedikit lebih tinggi daripada biaya akses terindeks sederhana. Tentu saja, teknik ini bergantung pada fakta bahwa rentang yang ditentukan oleh ip_start dan ip_end tidak pernah tumpang tindih.

Masalah dengan pendekatan awal Anda adalah bahwa mysql, karena tidak mengetahui batasan ini, hanya dapat menggunakan indeks untuk menentukan di mana harus memulai atau menghentikan pemindaian yang (menurutnya) diperlukan untuk menemukan semua kecocokan untuk kueri Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menyembunyikan prosedur tersimpan mysql

  2. MySQL memilih baris acak dengan GABUNG dari dua tabel

  3. jquery replacewith untuk mendapatkan data dengan Ajax setelah mengklik sel

  4. Jalankan beberapa kueri menggunakan objek Pernyataan JDBC tunggal

  5. Menanyakan hal-hal di dekat geolokasi?