2011-12-27 40 views
14

Tôi có một truy vấn SQL có sử dụng các giá trị của một mảng trong mệnh đề WHERE của nó:Có bao nhiêu giá trị trong mệnh đề "trong" quá nhiều trong truy vấn SQL?

$ids = array 
     ( 
      [0] => 1 
      [1] => 2 
      [2] => 5 
     ) 

$ids = join(',',$ids); 
$sql = "SELECT * FROM cats WHERE id IN ($ids)"; 


Câu hỏi của tôi là bao nhiêu id quá nhiều?
Nó có ảnh hưởng đến tốc độ không?

Cảm ơn tất cả

+0

Tất cả phụ thuộc vào cấu trúc bảng và chỉ mục của bạn. Và rõ ràng là Sergei nói càng chậm. – Aknosis

+0

có thể trùng lặp với [số lượng MySQL của các mục trong "trong mệnh đề"] (http://stackoverflow.com/questions/1532366/mysql-number-of-items-within-in-clause) –

Trả lời

0

Các giá trị hơn bạn đưa vào IN, càng chậm nó sẽ chạy, rõ ràng.

"số lượng quá nhiều" là hàm của nhiều yếu tố. Ví dụ: kích thước tập dữ liệu của bạn. Hoặc phần còn lại của truy vấn của bạn trông như thế nào.

4

Bạn càng chọn nhiều dữ liệu hơn, thời gian càng dài, nhưng mối quan tâm chính của bạn không phải là số id bạn chọn. Thay vào đó, bạn phải đảm bảo rằng id của bạn có một số INDEX trên đó hoặc là số PRIMARY KEY. Điều này sẽ giúp bạn tra cứu nhanh chóng bất kể bạn đang lấy bao nhiêu id.

+1

Nói chung là có. Nhưng nếu bạn kết hợp 'IN' với' ORDER' và 'LIMIT', bạn sẽ gặp vấn đề với các tập dữ liệu lớn. –

0

nghĩ về ... nếu bạn phải viết 5 trang hoặc 10 điều cần nhiều thời gian hơn ... bình thường nếu bạn có số lượng id lớn để truy vấn lâu hơn.Bạn nên xem và đảm bảo rằng dữ liệu của bạn không lặp lại bởi vì điều đó sẽ làm cho truy vấn mất nhiều thời gian hơn cho dữ liệu không cần thiết ..

5

Oracle có giới hạn 1000, mà tôi đã đạt trước đó. MySQL dường như không bận tâm. Giải pháp tốt nhất là không sử dụng mệnh đề IN cho tập dữ liệu lớn đó. Các id đến từ đâu? Nếu từ cùng một DB, hãy xem liệu bạn có thể sử dụng truy vấn con thay vì tìm kiếm dựa trên một tham số hay không, ví dụ: userid để tìm các id được liên kết. Điều này sẽ hiệu quả hơn nhiều khi MySQL có thể thực hiện một phép nối nội bộ bằng cách sử dụng các chỉ mục.

Các vấn đề liên quan