私はこれまで何年もSQLを使用してきましたが、めったにその単純な挿入や選択などはありませんでした。 PHPからPDOまでSQLite上で実行しているより複雑なSQL文を最適化するための助けを得ることができるのだろうかと思います。SQLite最適化マルチセレクトインサート
文が正しく動作しているように見えますが、私が予想していたより長くかかりそうです(多分、あまり期待しすぎています)。
これは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')
);
私は何を持っていることは、1つ以上のグループでは、加入者のリストです。サブスクライバをメールキューに追加し、1つ以上のグループ(1,2,3)に属するものを選択しますが、別のグループ(4,5,6)のグループにも含まれているものは除外します。
まず、これを行う方法の典型的な上記のSQLがありますか?
第2に、私はこの作業をできるだけ効率的に行うためにどのような兆候が必要ですか?
現在、avg spec LAMPで約5,000の加入者レコード(および少数のグループ)を取得するのに約30秒かかります。
パフォーマンスがそれほど重大ではありませんが、この情報をよりよく理解していただければ幸いです。
ブラッド
ありがとうマット、それは素晴らしいです。あなたの最初の解決策は30秒から約5または6になりました。これで十分です。私は本当に理解していないので、2番目のオプションを試してみませんでしたが、それが問題になる場合は、念頭に置いておきます。ありがとうございました –