2012-05-06 11 views
2

私が作成しているアプリケーションは主に選択を使いますが、挿入や更新などがあります。MyISAMとInnodbとInnodbに関連するテーブル

2つ目は、innodbに2つのテーブルが関連している場合、エラーが出なくても別のテーブルの行に関連する行はどうすれば削除できますか?

最後に、1つのテーブルに挿入すると、関連するテーブルの外部キーが自動的に入力されますか、これをプログラムしますか?

このアプリケーションは、PHPで書かれています。

おかげ

答えて

1

純粋に性能面のMyISAM歴史的に(いた?)InnoDBの優位。

しかしのMyISAMはないが完全に参照整合性制約およびトランザクションをサポートして/使用しないことを考えると、私は間違いなくInnoDBののために行くだろう、テーブルレベルのロックを使用しています。あなたが危険にさらすのはここではデータの完全性です。私の正直な意見でMyISAMの必要性を正当化するためには特別なシナリオが必要です。

関連するテーブルを考慮した質問について:希望するcascadeオプションをyour foreign key constraintsに指定してください。

+2

今のところMyISAMが持つ唯一の利点はフルテキストサポートであり、MySQL5.6(5.5?)のどこかでInnoDBになっています。あなたが真にローレベルのロックやトランザクションを必要としない限り、MyISAMを使用する理由はほとんどありません。 –

1

私が作成しているアプリケーションは、ほとんどが選択ですが、挿入や更新などがあります。これらの状況では、どのパフォーマンスが最適かを知りました。

さらに重要な質問:データが破損しても問題はありませんか?もしそうであれば、あなたはMyISAMが出ていることを意味するトランザクションが必要です。それで、初めての重要なパフォーマンスの向上が達成されただけです。つまり、アプリが動作していない状態から作業状態に移行するためです。

第2に、innodbに関連する2つのテーブルがある場合、エラーを出さずに別のテーブルの行に関連する場合、行を削除するにはどうすればよいですか?

関連する行を最初に削除するか、ON DELETE CASCADEを使用して外部キー制約を定義することによって、関連する行を自動的に削除します。危険な特徴です。

最後に、1つのテーブルに挿入すると、関連するテーブルの外部キーが自動的に入力されますか、これをプログラムしていますか?

いいえ、はい。それは魔法ではありません - アプリケーションが他の列に含めるべきことをどのように知っているのですか?

1

は、主に選択を使用していますが、いくつかは、挿入、更新

Dependsとしています。書き込みの読み込み量はいくらですか? 80%? 90%? 95%?書き込みは読み込みとインタリーブされているのか、バッチで実行されていますか?データベースにはどのレベルの同時アクセスがありますか?書き込みの重いテーブルがありますか?

MyISAMは読み込み速度がはるかに高速ですが、テーブル全体を書き込みにロックするため、Innodbと比較して全体的なスループットが低下します。

夜間ETLを使用したデータウェアハウスでは、MyISAMのパフォーマンスがさらに向上します。非トランザクションCMS(単純なパブリッシングツールだと思います)では、MyISAMの方が速いでしょう。典型的なWebベースのショップでは、95%以上の読み込みを期待しています。書き込みはほとんどの場合、特定のテーブルに分離されていて、一度に数行しか更新されません - ここでは少し余裕があり、ハイブリッドなアプローチである。 OTOHは、頻繁な更新と多数の同時アクセス(セッションデータの保存など)を伴うデータベースでは、innodbを使用する方法があります。

私はinnodbに関連する2つのテーブルを持っていますが、エラーが出なくても別のテーブルの行に関連する場合、どのように削除するのですか?

使用のInnoDBと私は1つのテーブルに挿入する場合、それは自動的にどのようにMySQLがデータを置くことを知っているん関連テーブルの外部キーに

を記入しますforeign key constraints

を宣言テーブルに?追加する行数あなた自身でこれを行う必要があります。

関連する問題