2011-12-08 2 views
0

私は以下のようなテーブル設定をしています。MySQLのオーバーヘッド、私のクエリが間違っているか、私はテーブルを最適化する必要がありますか?

Table comment_flags 
    user_id 
    comment_id 

彼らはミスを犯したかもしれないので、私は、フラグにユーザーがコメントを許可し、それらにそれをフラグ解除するためのオプションを与えます。

問題は、私がレコードを削除した後で、コメントのフラグを解除すると、コメントが5つしかコメントになっていなくても、comment_flagsテーブルはおよそ30-40バイトのオーバーヘッドになります。

は、相続人は基本的に起こっていただきました!: -

ユーザーフラグのコメントを、私はcomment_flagsテーブルにuser_idcomment_idを挿入し、その後、ユーザーがコメントをunflagsと私はuser_idcomment_idによりcomment_flagsテーブルから削除します。

私はそれが問題を引き起こしている私のSQL thatsだとは確信していませんが、私はそれが一般的にDELETEの文であると思います。

DELETEステートメントがテーブルをクリーンアップするたびにテーブルを最適化できました。

これは良い考えですか?他の人はどうやってこれに対処していますか?

私のSQLは非常に基本的です。

INSERT INTO comment_flags VALUE('$user_id', '$comment_id') 
DELETE FROM comment_flags WHERE user_id = '$user_id' AND comment_id = '$comment_id' 
+0

この値はどこから取得していますか? –

+0

テーブルを切り捨てて最適化する。この後、私が持っているコードを試してみると、約5分のUnflagsの後で、phpMyAdminに表示されているように、オーバーヘッドは約30-40bytesになります。 –

+1

http://stackoverflow.com/questions/634257/innodb-does-空きスペースが占有している行の再利用 – hafichuk

答えて

1

私はテーブルをクリーンアップするために、すべてのDELETE文の後、テーブルを最適化することができます。これはいいアイデアだと思われますか?

30-40バイトの場合は? No.

他の人はどうすればこのように対処しますか?

気にしないでください。その後の任意のスペースについては、should be re-usedがあり、これはgoodです。

+0

それは本当に素晴らしい答えだとは言えません。しかし、ありがとう。 –

+0

@SeanHJenkins:どうしてですか? –

+0

@SeanHJenkins大したものではないかもしれないが、正しい。多くの 'DELETE' /' INSERT'が起こった後でテーブルを '最適化 'したいと思うでしょう。 – Romain

関連する問題