2011-10-21 3 views
1

私は成長しつつある約500,000行のInnoDBテーブルを持っています。MySQL InnoDBテーブルのテキストフィールドのサイズは、フィールドがクエリで使用されていない場合のパフォーマンスに影響しますか?

テーブルの大きさは現時点で約2GBですが、大部分のサイズはかなりのXMLデータを格納するテキストフィールドから来ています。このxmlデータは頻繁に読み取られず、ほとんどのクエリはそれを選択しません。

このデータを別のテーブルに移動すると、サーバーの制限されたメモリに一度に多くの行を保持できるため、クエリの処理速度が向上しますか?

+0

あなたはselect * from blah blah .....を使用していますか、またはblah blahからcol_1、col_2、my_mighty_text_colを選択していますか?必須でない場合は、大きな列を選択クエリに含めないでください。 –

+0

私は必要な列を指定していますので、select col1、col2などです。select文に大きなフィールドを指定しないと、MySQLはメモリに必要な行の一部だけをロードすることになりますか?または、MySQLは一度に行全体をロードしますか? – Zane

答えて

2

テーブルがInnoDBで、SELECTにテキストフィールドを指定していない場合は、[OK]をクリックします。ただし、主キーができるだけ小さいことを確認する必要があります(はgen_clust_indexに格納されています)。 Keep in mind that InnoDB performs a clustered index lookup with every query, regardless of non-Indexed Lookups, Indexed Lookups, or Primary Key Lookups

この質問に尋ねたという事実にもかかわらず、その反対のことを考慮する必要があります。結果セットにテキストフィールドを含むクエリがいくつかあります。

私は次のことを確認します:MySQLのパケット、InnoDBのログファイル、InnoDBのログバッファのサイズは正しくです。なぜこれらの設定に関係がありますか? Rows of Data must pass through these structures. Make sure that max_allowed_packet is large enough to hold the biggest text field you have in the database at least 10 times. Same goes with InnoDB Log Files and the InnoDB Log Buffer

+0

ありがとうございました。私はこれを実践し、あなたが返信する前にあなたが言うことを確認するためにいくつかのベンチマークを実行することを望んでいましたが、まだチャンスはありませんでした。私がしたら、私はあなたを更新します。 – Zane

関連する問題