PostgreSQL v8.2.3を使用しています。
関係するテーブルがあります:EMPLOYEEとEMAILLIST。
Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)
2つのテーブルは、EMPLOYEE.EMAIL1またはEMPLOYEE.EMAIL2に一致するエントリがない場合、それらの行が返されるように結合されます。
SELECT employee.email1, employee.email2,
e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched
FROM employee
LEFT JOIN emaillist e1 ON e1.email = employee.email1
LEFT JOIN emaillist e2 ON e2.email = employee.email2
WHERE e1.email IS NULL OR e2.email IS NULL
テーブルのvarchar(256)である列EMAIL
にインデックスが付けられます。現在、応答時間は14秒です。EMAILLIST
テーブル数の統計:現在、EMPLOYEEには165,018レコード、EMAILLISTには1,810,228レコードがあり、両方のテーブルは将来的に増加する予定です。
- VARCHARカラムにインデックスを付けるのは良いアイデア/アプローチですか?この質問は、アプリケーションで以前にVARCHAR列のインデックスを作成したことがないため、すぐに思いつきます。これに関する専門家のアドバイス/提案は高く評価されています。
- この現在のクエリとインデックスでは、14秒の応答時間は妥当ですか、またはさらに調整する余地はありますか?この種のテーブルサイズと応答時間に基づく他のユーザーのリアルタイムエクスペリエンス/意見は何ですか?