この私のシナリオでは、名前を使用してSQLテーブルのレコードを検索しようとしました。そこで、サブクエリを作成しようとしましたが、Postgresでもlike演算子を使用しました。SQLクエリ正常に動作しています。しかし、それはとても時間がかかります。それで、なぜそんなに時間がかかるのかを確認しました。その理由はサブクエリです。サブクエリでは、テーブル内のすべてのレコードにヒットします。サブクエリを最適化する方法。
SQLクエリ
SELECT
id, latitude,longitude,first_name,last_name,
contact_company_id,address,address2,city,state_id, zip,country_id,default_phone_id,last_contacted,image,contact_type_id
FROM contact
WHERE company_id = 001
AND contact_company_id IN (select id from contactcompany where lower( name ) ~*'jack')
そのため、このクエリを実行しようとすると2秒かかり、連絡先の会社のテーブルにあるすべてのレコードにヒットしましたが、時間がかかるだけです。SQLを使用してサブクエリを最適化する方法は?
まず、を使用してクエリを記述しますexists
。次に、company_id
は文字列または数値のいずれかです。定数は先行ゼロで表されるため、文字列であると推測してみましょう。その場合は、一重引用符を使用してください。
SELECT c.*
FROM contact c
WHERE company_id = '001' AND
EXISTS (SELECT 1
FROM contactcompany cc
WHERE cc.name ~* 'jack' AND
cc.id = c.contact_company_id
);
次に、のインデックスcontact(compnay_id, contact_company_id)
は理にかなっています。そして、サブクエリの場合、contactcompany(id, name)
。
クエリを作成するための他の選択肢があるかもしれませんが、あなたの質問はテーブルサイズ、現在のパフォーマンス、またはデータ型に関する多くの情報を提供していません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加