
postgresql 7.2.1を利用しています。
下記のようなSQL文でクエリーすると、結果が帰るまでに約40秒ほどかかります。
条件1を外すと1秒です。なにか条件絞り込みを入れ子の構造にして、最後に条件1で絞り込むようにすれば、高速化が図れると思うのですが、どのようにすればいいのでしょうか?
select tbl_1.ptnum, tbl_2.name, tbl_5.seidoname
from tbl_1, tbl_2, tbl_3, tbl_4, tbl_5
where tbl_3.ymd>=20000101 and tbl_3.ymd<=20061231 --期間
and tbl_4.endymd>=20050704 --有効期間内
and tbl_2.nusi like '%匿名%' --条件1
and tbl_1.id=tbl_3.id and tbl_1.id=tbl_2.id and tbl_1.id=tbl_4.id and tbl_4.bannum=tbl_5.bannum --結合
order by tbl_1.ptnum
なおfrom行でinner joinで結合したら少し早くなりました。
No.2ベストアンサー
- 回答日時:
explain を使って検索にかかるコストを調べてみてください。
like はindexが効かないので、全件検索になります。ひょっとしたら以下のようなSQLが効き目があるかも。
select t.ptnum, t.name, t.seidoname
from
(select tbl_1.ptnum, tbl_2.name, tbl_5.seidoname
from tbl_1, tbl_2, tbl_3, tbl_4, tbl_5
where tbl_3.ymd>=20000101 and tbl_3.ymd<=20061231 --期間
and tbl_4.endymd>=20050704 --有効期間内
and tbl_1.id=tbl_3.id and tbl_1.id=tbl_2.id and tbl_1.id=tbl_4.id and tbl_4.bannum=tbl_5.bannum --結合) as t
where
t.nusi like '%匿名%' --条件1
order by t.ptnum
No.3
- 回答日時:
これからPostgreSQLをはじめようとしているものです。
Oracleの経験はあるのですが、
Oracleはルールベースで検索しているとき、インデックスなどの優先的に使用される条件以外はWhere分のより後に書いてある条件から検索されるようになっていました。
LIKE文をより前に変えると結果が変わりますか?
また日付の条件はインデックスが設定されているカラムですか?
統計情報を取得している場合はコストベースで考えるのでまた結果は代わってくると思います。
OracleとPostgreSQLの共通点、相違点について興味があります。
よろしければ結果をお教えください。
No.1
- 回答日時:
もし適切な索引が設定されていないのであれば、たくさんの絞込み効果が出るような索引を作成することによって高速化できる場合があります。
ちなみに、各テーブルのデータ件数はどのくらいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
顧客データベースを作る場合、...
-
select文のwhere句に配列を入れ...
-
スペースを検索したい
-
あいまい検索で英文字の全角半...
-
ストアドの戻り値で配列を返す方法
-
SQLで特定の項目の重複のみを排...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
Outlook 送受信エラー
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
Access:クエリーにて集計後に...
-
1、Rstudioで回帰直線を求める...
-
エクセルで最後の文字だけ置き...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
エクセルのxans.について
-
JANコードとPOSコードは同じ?
-
access2021 VBA メソッドまたは...
-
エクセルの関数について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
顧客データベースを作る場合、...
-
スペースを検索したい
-
SQLServer2005のストアドプロシ...
-
select文のwhere句に配列を入れ...
-
ストアドの戻り値で配列を返す方法
-
INSERT文などの列名などの半角...
-
末尾の全角スペースの削除
-
あいまい検索で英文字の全角半...
-
DBの配列定義
-
エクセルの関数を使用して文字...
-
ORACLEの「DECODE」と同じ意味...
-
WHERE条件の最終桁のスペースに...
-
外部結合で取得した項目にNVL関数
-
Oracleのスペース文字について。
-
Key Word検索について
-
管理工学研究所のデーターベー...
-
MySQLでどうしてもSyntaxエラー...
-
イコールとノットイコール条件...
-
ストアドプロシージャーの作成方法
-
SQL文で複数列の更新をしたい。
おすすめ情報