2011-11-30 28 views
8

Giả sử tôi có một truy vấn với hai điều kiện MySQL:Trình tự thực hiện điều kiện trong MySQL

SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%'; 

Điều kiện đầu tiên là rõ ràng là sẽ rẻ hơn rất nhiều so với thứ hai, vì vậy tôi muốn chắc chắn rằng nó chạy đầu tiên, hạn chế nhóm các hàng sẽ được so sánh với mệnh đề LIKE. Các điều kiện truy vấn MySQL có chạy theo thứ tự chúng được liệt kê hay không, nếu không, có cách nào để xác định thứ tự không?

Trả lời

6

MySQL có trình tối ưu hóa truy vấn nội bộ sẽ xử lý những thứ như vậy trong hầu hết các trường hợp. Vì vậy, thông thường, bạn không cần phải lo lắng về nó.

Nhưng, tất nhiên, trình tối ưu hóa truy vấn không phải là dễ dàng. Vì vậy ...

Xin lỗi bạn đã làm điều này với bạn, nhưng bạn sẽ muốn làm quen với EXPLAIN nếu bạn nghi ngờ rằng truy vấn có thể hoạt động kém hiệu quả hơn mức cần thiết.

http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

Không chẩn đoán một truy vấn cụ thể, chỉ cần nghiền ngẫm khả năng. Cảm ơn lời khuyên EXPLAIN, tôi sẽ phải đọc nó. – wyatt

6

Các optimizer sẽ đánh giá các điều kiện WHERE trong trật tự nó thấy phù hợp.

SQL là declarative: bạn nói với optimizer bạn muốn, không cách để làm điều đó.

Trong ngôn ngữ procedural/imperative (.net, Java, php v.v.) thì bạn nói cách và chọn điều kiện nào được đánh giá trước tiên.

Lưu ý: "trái qua phải" không áp dụng trong các biểu thức nhất định như (a+b)*c như bạn mong muốn

+1

Chính xác, bạn cũng không thể sử dụng thứ tự thực thi điều kiện MySQL như 'hoặc điều kiện', trong ngôn ngữ thủ tục, bạn có thể sử dụng 'if (a == 1 || b == 3) ..', khi 'a == 1', 'b == 3' sẽ không bao giờ được thực thi. –

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