プロが教えるわが家の防犯対策術!

SQLの高速化に関する情報を教えてください!
結合する時、どっちのテーブルを=の左にする(これ、分かりません・・・)、とか、多くのテーブルとテーブルの結合条件を書く際、WHEREに近い方にどういう結合条件を持ってきたらいい、とか、WHERE句を評価する時のDBの検索の仕組み(順番)とか・・・基本的なとこから全部知りたいです!
↑これは適当に言っていることであって、このような感じの情報がもしあれば、知りたいということです。
どうかお願いいたします。

A 回答 (5件)

まずは簡単な事からやっていけ良いのでは。



Aテーブル(マスタ)項目1,項目2,項目3
Bテーブル(サブ参照用1)コード,名称
Cテーブル(サブ参照用2)コード,名称
上記テーブルよりデータを検索するとします。
select
A.項目1,A.項目2,A.項目3,B.名称,C.名称
from A,B,C
where
A.項目1 = 条件 AND --マスタの抽出(1)
A.項目2 = B.コード(+) AND --マスタとBテーブル(2)
A.項目3 = C.コード(+) --マスタとCテーブル(3)

実行結果の件数はAテーブルの(1)の結果件数です。
次にマスタからBテーブルより名称を取得します
条件は(2)となり(+)によりなければ空白が名称
となります。
(3)は(2)と同じで参照先が異なります。
Where句の順番はマスタから記述。
それとテーブル間はプライマリを記述そして複数
項目の場合はテーブル構成の順番通りに記述する。
この為,高速化の目的で別インデックスを作る。
ただし読込みが早いと書込みが遅い事を忘れずに。
あとは色々勉強してみて下さい。
(説明悪いかな)

この回答への補足

詳しい説明、ありがとうございました!
分からない箇所が3つあり、
>テーブル間はプライマリを記述
プライマリは分かりますが、テーブル間とはどういうことでしょうか?
>ただし読込みが早いと書込みが遅い事を忘れずに。
DBのことでしょうか?読み込み、書き込みとは?
>複数項目の場合はテーブル構成の順番通りに記述
SELECT句の部分ですよね?
もし回答いただけるのでしたら幸いです・・・。
その後は、自分で勉強してみますので!

補足日時:2006/06/21 21:30
    • good
    • 0

「あくまでも適当な一例」とのことでしたが、気になった点がありますのでお伝えします。



開発の職場で古くから語り継がれているノウハウ(どっちのテーブル=の左に・・・など)の中には、古いOracleの仕組みを元にしていることがよくあります。

だから、「教えを守ってSQLを書いたのに本当に効果があるんだろうか?」という話になってしまいます。
そんな経験はありませんか?


古い仕組みとはルールベース・オプティマイザで
これに対してコストベース・オプティマイザ 

簡単に言ってしまうと、
SQL文の書き方ひとつで、
・性能に大きく影響するのがルールベース
・性能にあまり影響しないのがコストベース


いまどきルールベースで運用されているDBはほとんどありませんが、この2つの違いを理解していないと、いろんな情報に惑わされてしまいます。
まず、この2つの違いを理解しておくことをおすすめします。


それからコストベース・オプティマイザでは、
「統計情報の収集」がきちんと定期的に実施されているかどうかが、SQLの性能に大きく影響します。

質問者さんが使っている環境には、DB管理者がいるでしょうか?それとも管理者不在でしょうか?
DB管理がしっかりしていれば、他の人はあまり気にしなくてもよいのですが、「統計情報の収集」がどういったタイミングで実施されているか、把握しておくことをおすすめします。

なお、収集はOracleバージョンによって、明示的な実行が必要だったり、Oracleが自動でやってくれたり、いろいろです。


以上です。
SQLの性能に非常に大きく関係しますので、SQLのチューニングを覚えるより前に、ぜひ理解しておきましょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
そういうことも必要な知識なのですね。
分からない部分は、一つ一つ調べてみます。

お礼日時:2006/07/03 23:07

かなりレベルが高いですが


(初心者向けの回もあります)
このメルマガは非常に役立ちます

参考URL:http://www.insight-tec.com/mailmagazine/ora3/vol …
    • good
    • 0
この回答へのお礼

ありがとうございます。利用させていただきます。

お礼日時:2006/06/17 00:10

基本的な事ってどのくらい基本から書けばいいのか。

。。
それこそ本書ける位の分量になるので。
SQL以前にデータ構造や、適切なインデックスとかを設計してます?

この回答への補足

B設計に関しては知識がありません。PG歴8ヶ月ですので、コーディングしかしたことありません。今まで、SQLは他の人が既に作成済であったり、他のソースからコピーしてきたりして何とかしていました。人任せにしてきてしまい、基本的なところから分かっていないため、質問させていただきました。
>基本的な事ってどのくらい基本から書けばいいのか。。。
広い分野で質問をしてしまったようで、申し訳ありません。
基本的なところとは、私が例に挙げているようなことがあれば、教えて頂きたいということです。

補足日時:2006/06/16 00:52
    • good
    • 0
この回答へのお礼

B設計⇒DB設計の間違いです。申し訳ありません。

お礼日時:2006/06/16 00:52

DBのチューニングは多岐に渡るのでここではとても説明できません。



SQLのチューニングなら...
http://www.atmarkit.co.jp/fdb/index/index-db.htm …

まずは読み込む件数そのものを減らす工夫からはじめてみては。
    • good
    • 0
この回答へのお礼

ありがとうございます!明日じっくり読んでみます。

お礼日時:2006/06/16 00:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!