Giả sử ai đó đã đến với bạn và nói rằng chúng tôi sẽ cắt giảm số lượng SQL mà chúng tôi viết bằng cách thay thế bằng IN
. Việc sử dụng sẽ là cả hai cho các giá trị vô hướng đơn và danh sách các số.câu lệnh sql bằng với số
SELECT *
FROM table
WHERE id = 1
HOẶC
SELECT *
FROM table
WHERE id IN (1)
Là những tuyên bố tương đương với những gì tôi ưu hoa sản xuất? Điều này trông thực sự đơn giản trên bề mặt, nhưng nó dẫn đến đơn giản vì hai lý do: 1. khối lớn SQL không cần phải được nhân đôi, và 2. chúng tôi không lạm dụng SQL động.
Đây là một ví dụ được tạo ra, nhưng hãy xem xét những điều sau đây.
select a.* from tablea a
join tableb b on a.id = b.id
join tablec c on b.id2 = c.id2
left join tabled d on c.id3 = c.id3
where d.type = 1
... và giống nhau một lần nữa cho nhiều hơn một trường hợp
select a.* from tablea a
join tableb b on a.id = b.id
join tablec c on b.id2 = c.id2
left join tabled d on c.id3 = c.id3
where d.type in (1,2,3,4)
(đây không phải là ngay cả một tuyên bố lớn)
hình dung bạn có thể làm chuỗi nối, nhưng điều này là không mong muốn trong ánh sáng của việc sử dụng ORM, và chuỗi nối động SQL luôn luôn bắt đầu với ý định tốt (ít nhất là trong các phần này).
Chúng phải tương đương nhau. Hãy xem kế hoạch thực hiện để chắc chắn. –
Tôi nghĩ rằng có nhiều thứ phù hợp hơn để tập trung vào vấn đề này, như bí danh bảng, không sử dụng 'SELECT *', v.v. Kế hoạch truy vấn là điều duy nhất sẽ cho bạn biết trình tối ưu hóa thấy gì và nó có thể thay đổi dựa trên chỉ mục và thống kê. –
Tôi đã thử nghiệm trên 6 triệu bảng hàng. Và bị ảnh hưởng hàng là 150 nghìn hàng.Câu trả lời đều giống nhau. – shenhengbin