必要なSQLインデックスの作成に関するアドバイス

Cbpro広告:

このSQLクエリは、マスタで40Kレコードと第二の表の5000行があるとして実行する以上13 SECONDS秒かかります。

いずれかを作成するインデックスを伝えることはできますか?私は、組み合わせインデックスとして有効期限の日付と電子メールを作成しているが、動作しません。

SELECT email,first_name,last_name,userid,PASSWORD,cons FROM MASTER 
WHERE expirydate <='2020-02-27' 
AND email NOT IN (SELECT (email) FROM bounce_emails_amazon)



EXPLAIN
1   PRIMARY MASTER  \N  ALL expdate_email,expemail.userid   \N  \N  \N  38228   60.75   Using where

2   SUBQUERY    bounce_emails_amazon    \N  index   email   email   103 \N  3567    100.00  Using index



ビルKarwin:

私がお勧めします:

ALTER TABLE `master` ADD INDEX (expirydate);
ALTER TABLE `bounce_emails_amazon` ADD INDEX (email);

その後@Alexが示唆されていること、クエリの参加除外を使用する(私はここでそれを含めます):

SELECT 
  m.email,
  m.first_name,
  m.last_name,
  m.userid,
  m.PASSWORD,
  m.cons 
FROM MASTER m
LEFT JOIN bounce_emails_amazon b
ON b.email = m.email
WHERE m.expirydate <='2020-02-27' 
AND b.email IS NULL

これが優れている理由は、サブクエリを使用して示した元のクエリ全体をスキャンしてもよいということであるbounce_emails_amazon外部クエリのすべての行のために。結合を使用して、とに索引を追加することによって、emailカラム、それだけで一致する行を検索します。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=8207&siteId=1