2010-11-29 9 views
2

Hibernateツールを使用してHibernate ORMを使用するJavaアプリケーションを作成しました。エンティティとして使用されるJavaオブジェクトからDBスキーマをインストールまたはアップグレードする自動スクリプトを取得します。MySQL:ユニークでインデックスの同等性

プログラムはMySQLでは正常に動作しますが、Oracleの場合、あるカラムで制約「一意」が宣言され、インデックスが定義された後にエラーが発生します。 Oracleは、 "一意の"制約はデフォルトでインデックスを作成するので、同じ列の2つのインデックスは宣言できません。

したがって、MySQLで一意性制約と1つのインデックスの間に等価または関連があるかどうかです。

明確にしてください。ありがとうございました。

答えて

0

一意の制約には、強制できるようにインデックスが必要です。どちらのDBMSも、列を一意に宣言するときに適切なインデックスを作成します。唯一の違いは、Oracleは冗長なインデックスを作成できませんが、MySQLにはないということです。

show index from test_table; 

+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| test_table |   0 | PRIMARY |   1 | id   | A   |   0 |  NULL | NULL |  | BTREE  |   | 
| test_table |   0 | foo_unique |   1 | foo   | A   |   0 |  NULL | NULL |  | BTREE  |   | 
| test_table |   1 | foo_key |   1 | foo   | A   |   0 |  NULL | NULL |  | BTREE  |   | 
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
+0

おかげでたくさんの男 – RGB

+0

@RGB、どういたしまして。あなたの好きな答えを受け入れるように自由にタグ付けしてください;-) –

0

MySQLは役に立たないインデックスを気にしません。更新の場合は、すべての一意のインデックスをチェックし、SELECTの場合は任意のインデックスを選択します。

したがって、Oracleを幸せにするには、一意索引を作成する前に索引を削除します。

関連する問題