異なるテーブルの電子メールアドレスがさまざまなケースにある現在のクエリは、小文字と小文字を比較する必要があります。しかし、lower()で以下のクエリを実行すると、それを実行するよりも1億倍も遅くなります。WHERE条件が大きいネストループを引き起こす条件
誰かが回避策を提案できますか?
SELECT
person_oct.email,
unsubs.unsubs_email
FROM
public.unsubs,
public.person_oct
WHERE
lower(person_oct.email) = lower(unsubs.unsubs_email) AND
unsubs.unsubs_email IS NOT NULL AND
unsubs.unsubs_email != '' AND
person_oct.email != '' AND
person_oct.email IS NOT NULL ;
どのDBMSを使用していますか?そして、lower()の有無にかかわらず、そのクエリの完全な実行計画は何ですか?それらの2つの列に対して 'lower()'にインデックスを追加することで、改善できるはずです –
この解決策を試してみてくださいhttp://stackoverflow.com/questions/1224364/sql-server-ignore-case-in-a-where -expression – Sparrow
文字列操作でインデックスの使用をブロックすることができます。 – scaisEdge