0

これは理論的な例です-私が学ぶのを助ける方法として私が提起した質問です。大規模なデータベースに関しては、私はアマチュア以上のものですが、もっと学びたいと思っているので、ポインタと説明をいただければ幸いです。

次のSQLは、800万レコードのデータベースで実行されようとしていますが、効率を向上させるために何ができるでしょうか。

SELECT
   email_subscribers_extra.sendscont,   
   email_list_subscribers_new.subscriberid,
   email_subscribers_extra.lastopen  
FROM 
   email_list_subscribers_new 
LEFT JOIN 
   email_subscribers_extra ON email_subscribers_extra.subscriberid = email_list_subscribers_new.subscriberid 
WHERE 
   email_list_subscribers_new.partner = 'AJ' 
ORDER BY 
   email_subscribers_extra.lastsend ASC LIMIT 0, 40000

編集:それがLinuxのApache、mysqlサーバーであると仮定しましょう。それは私が通常使用するものです。現在、インデックスは設定されていません。

4

1 に答える 1

2

効率の向上は、SQL チューニングの常套句です。通常、インデックスを追加して SELECT のパフォーマンスを向上させますが、インデックスを追加すると通常は更新が遅くなります。すべての INSERT および DELETE ステートメントでは、インデックスを書き換える必要があります。多くの UPDATE ステートメントでは、インデックスの書き換えも必要になります。

実行計画を見たり、INSERT、UPDATE、および DELETE ステートメントへの影響を考慮したりせずに、インデックスを追加することをお勧めします。

  • WHERE句で使用されるすべての列、
  • JOIN 条件で使用されるすべての列、
  • ORDER BY で使用されるすべての列。

ほとんどの dbms は、外部キー参照で使用される列にインデックスを自動的に追加します。ただし、少なくともそれらのいくつかでは、後でそのインデックスを削除できます。

したがって、これらの列にインデックスを追加するか、外部キー制約をサポートするインデックスが存在することを確認してください。

  • email_list_subscribers_new.subscriberid
  • email_list_subscribers_new.partner
  • email_subscribers_extra.subscribeid
  • email_subscribers_extra.lastsend

場合によっては、単一列インデックスを 2 つ使用するよりも、複数列インデックスを 1 つ使用した方が SELECT のパフォーマンスが向上します。

于 2012-12-13T11:09:06.553 に答える