2

私が作成しているアプリケーションは主にselectを使用しますが、挿入や更新などもあります。このような状況でのパフォーマンスに最適なのはどれかと思いました。

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

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

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

ありがとう

4

3 に答える 3

1

純粋にパフォーマンス面でのMyISAMは、歴史的に(持っていましたか?)InnoDBよりも優れています。

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

関連するテーブルを考慮した質問について:外部キー制約cascadeに必要なオプションを指定するだけです。

于 2012-05-06T21:27:10.317 に答える
1

私が作成しているアプリケーションは主にselectを使用しますが、挿入や更新などもあります。このような状況でのパフォーマンスに最適なのはどれかと思いました。

より重要な質問:データが破損したかどうかは重要ですか?もしそうなら、あなたはトランザクションを必要とします、それはMyISAMが出ていることを意味します。次に、パフォーマンスに気を配り始めることができます。それは、アプリが機能しない状態から機能する状態に移行するという、最初で最も重要なパフォーマンスの向上を達成したからです。

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

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

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

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

于 2012-05-06T21:27:25.780 に答える
1

主に選択を使用しますが、一部は挿入、更新です

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

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

夜間のETLを備えたデータウェアハウスの場合も、MyISAMには正味のパフォーマンス上の利点があります。非トランザクションCMS(単純な公開ツールを考えてください)の場合も、MyISAMの方が高速である可能性があります。典型的なWebベースのショップでは、95%以上の読み取りが見られ、書き込みはほとんど特定のテーブルに分離され、一度に数行が更新されます。ここでは、もう少し限界があり、最善の解決策はハイブリッドアプローチになります。頻繁に更新され、多数の同時アクセス(セッションデータの保存など)が行われるデータベースのOTOHは、innodbが最適な方法です。

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

innodbを使用し、外部キー制約を宣言します

1つのテーブルに挿入すると、関連するテーブルの外部キーが自動的に入力されますか?

mysqlはどのデータをテーブルに入れるかをどのように知るのですか?追加する行はいくつですか?これは自分で行う必要があります。

于 2012-05-06T22:17:53.910 に答える