2

私は、Oracle データベースの操作を担当する、Oracle の経験がほとんどない PHP 開発者です。

最初に気付いたのは、MySQL で見慣れているように、テーブルに自動番号インデックスがないように見えることです。代わりに、2 つのフィールドからインデックスを作成しているようです。

たとえば、インデックスの 1 つが日付フィールドと外部キー ID フィールドの組み合わせであることに気付きました。日付フィールドには日付とタイムスタンプ全体が格納されているように見えるため、組み合わせはかなりユニークです。

インデックス名が PLAYER_TABLE_IDX の場合、PHP コードでこのインデックスを使用するにはどうすればよいですか?

このインデックスで一意のレコードを参照したい (SQL クエリの WHERE 部分で 2 つの AND 句を使用するのではなく)

Oracle/PHP の達人に何かアドバイスはありますか?

4

2 に答える 2

12

このインデックスで一意のレコードを参照したい (SQL クエリの WHERE 部分で 2 つの AND 句を使用するのではなく)

一意の行を取得するために複合主キーのすべての列を参照する必要があることを回避する方法はありません。

SQL クエリでインデックスを直接使用することはできません。
Oracle では、ヒント構文を使用して、使用する必要があるインデックスを提案しますが、インデックスの使用を希望する唯一の手段は、SELECT、JOIN、WHERE、および ORDER BY 句で関連付けられた列を指定することです。

最初に気付いたのは、MySQL で見慣れているように、テーブルに自動番号インデックスがないように見えることです。

Oracle (および PostgreSQL) には、「シーケンス」と呼ばれるものがあります。これらはテーブルとは別のオブジェクトですが、MySQL の auto_increment と同様の機能に使用されます。MySQL の auto_increment とは異なり、テーブルごとに複数のシーケンスを使用でき (関連付けられることはありません)、それぞれを個別に制御できます。

代わりに、2 つのフィールドからインデックスを作成しているようです。

それがテーブルの設計であり、それについて特にOracleは何もありません。

しかし、データベース内でのインデックスの意味は、用語の使用方法とは異なることに対処する時が来たと思います。インデックスは、テーブルからのデータの選択を高速化するための追加のステップです (ただし、それらを維持するために INSERT/UPDATE/DELETE が遅くなります)。

あなたが話していることは、実際には主キーと呼ばれます。この例では、複数の列が含まれるため、複合キーと呼ばれます。この場合、列の 1 つである DATE (DATETIME と考えてください) または外部キーが重複している可能性があります。ただし、キーは両方の列に基づいているため、2 つの値の組み合わせがテーブル内の一意のレコードへのキーになります。

于 2010-09-23T01:46:43.213 に答える
1

http://use-the-index-luke.com/は、Oracleでのインデックスの使用方法を説明する私のWebブックです。

それはあなたの質問にはやり過ぎですが、物事がどのように機能するかを理解したいのであれば、おそらく読む価値があります。

于 2010-09-23T06:12:54.213 に答える