Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tra cứu hiệu quả trong bảng phạm vi

Cho rằng bạn đã có chỉ mục trên ip_start , đây là cách sử dụng nó tốt nhất, giả sử rằng bạn muốn thực hiện một quyền truy cập cho mỗi IP (1234 trong ví dụ này):

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

Thao tác này sẽ sử dụng chỉ mục của bạn để bắt đầu quét. Quá trình này sẽ dừng ngay lập tức do limit 1 . Chi phí chỉ nên cao hơn một chút so với chi phí của một truy cập được lập chỉ mục đơn giản. Tất nhiên, kỹ thuật này dựa trên thực tế là các phạm vi được xác định bởi ip_startip_end không bao giờ chồng chéo.

Vấn đề với cách tiếp cận ban đầu của bạn là mysql, không biết về ràng buộc này, chỉ có thể sử dụng chỉ mục để xác định nơi bắt đầu hoặc dừng quá trình quét (nó nghĩ) nó cần để tìm tất cả các kết quả phù hợp cho truy vấn của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để loại bỏ khoảng cách dòng giữa các dòng trong Textarea?

  2. Chọn điểm từ cơ sở dữ liệu bản đồ theo bán kính

  3. Truy vấn nhanh cho SQL

  4. Làm cách nào để xuất hàng triệu hàng từ MySQL sang CSV thông qua PHP mà không làm cạn bộ nhớ?

  5. Cú pháp IF / CASE của MySQL gọi các câu lệnh SELECT khác nhau