저는 몇 년 동안 SQL을 사용해 왔지만 단순한 삽입 및 선택 등은 거의 없습니다. SQL 전문가는 아닙니다. PHP에서 PDO까지 SQLite에서 실행중인보다 복잡한 SQL 문을 최적화하는 데 도움이 될지 궁금합니다.SQLite 최적화 다중 선택 삽입
성명이 올바르게 작동하는 것으로 보입니다. 예상보다 오래 걸리는 것처럼 보입니다. (아니면 그냥 너무 많이 기대하고 있습니다.)
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')
);
내가있어하는 하나 개 이상의 그룹에 가입자의 목록입니다 :
이
는 SQL이다. 구독자를 메일 대기열에 추가하고 하나 이상의 그룹 (1,2,3)에 속한 그룹을 선택하지만 다른 그룹 (4,5,6) 그룹에있는 그룹은 제외 시키려고합니다.첫째, 위의 SQL은 일반적인 방법입니까?
둘째,이 작업을 가능한 효율적으로 수행하기 위해 어떤 표시가 있어야합니까?
현재 평균 사양 LAMP에 약 5000 개의 가입자 레코드 (소수 그룹)를 얻는 데 약 30 초가 소요됩니다.
성능이 그다지 중요하지 않지만,이 내용을 더 잘 이해하고 싶으므로 통찰력이 크게 향상 될 것입니다.
브래드
감사합니다. Matt, 훌륭합니다. 첫 번째 해결책은 30 초에서 약 5 또는 6까지 내려갔습니다. 두 번째 옵션을 시도하지 않았는데 실제로 이해하지 못했지만 문제가되는 경우이를 명심합니다. 감사합니다. –