Tôi đã sử dụng SQL trong nhiều năm nay nhưng hiếm khi có gì thêm vào đó chèn đơn giản và chọn v.v ... vì vậy tôi không có chuyên gia SQL. Tôi tự hỏi nếu tôi có thể nhận được một số trợ giúp trong việc tối ưu hóa một câu lệnh SQL phức tạp hơn mà tôi đang thực hiện trên SQLite, từ PHP thông qua PDO.Tối ưu hóa đa lựa chọn chèn SQLite
Tuyên bố có vẻ hoạt động chính xác, dường như mất nhiều thời gian hơn tôi dự kiến (hoặc có lẽ tôi chỉ mong đợi quá nhiều).
Đây là SQL:
INSERT OR IGNORE INTO MailQueue(SubscriberID, TemplateID)
SELECT Subscribers.ID, '1' AS TemplateID
FROM Subscribers
INNER JOIN SubscriberGroups ON Subscribers.ID=SubscriberGroups.SubscriberID
WHERE SubscriberGroups.GroupID IN ('1', '2', '3')
AND Subscribers.ID NOT IN
(
SELECT Subscribers.ID FROM Subscribers
INNER JOIN SubscriberGroups ON Subscribers.ID=SubscriberGroups.SubscriberID
WHERE SubscriberGroups.GroupID IN ('4', '5', '6')
);
Những gì tôi đã có được một danh sách các thuê bao, trong một hoặc nhiều nhóm. Tôi muốn thêm người đăng ký vào hàng đợi thư, chọn những người thuộc một hoặc nhiều nhóm (1,2,3) nhưng loại trừ những người đăng ký cũng thuộc một nhóm nhóm khác (4,5,6).
Thứ nhất, SQL ở trên là điển hình về cách thực hiện điều này?
Thứ hai, tôi nên làm gì để làm công việc này hiệu quả nhất có thể?
Hiện tại, mất khoảng 30 giây để có được khoảng 5000 hồ sơ người đăng ký (và một số ít nhóm) trên LAMP spec avg.
Vào cuối ngày, hiệu suất không quan trọng, nhưng tôi muốn hiểu nội dung này tốt hơn để mọi thông tin chi tiết được đánh giá cao.
Brad
Cảm ơn Matt, điều đó thật tuyệt. Giải pháp đầu tiên của bạn đã nhận được nó từ 30 giây xuống còn khoảng 5 hoặc 6 là đủ tốt. Tôi đã không thử tùy chọn thứ hai vì tôi không thực sự hiểu nó, nhưng tôi sẽ giữ nó trong tâm trí nếu nó trở thành một vấn đề. Cảm ơn lần nữa –