2011-09-13 8 views
2

"memberdata"テーブルに約155000行あり、63カラムのサイト(MLM)を開発しています。 すべてのメンバーが、異なるデータに対してそのテーブルから頻繁に検索します。 私のSQLクエリは次のようである:MySQLテーブルで検索を高速化する方法(No Index)

$search=htmlentities($_POST['search_field']); /// The field which will be selected 
$value=htmlentities($_POST['search_value']); /// The value which will be compared 
SELECT * FROM memberdata WHERE $search='$value' AND (senior='".$_SESSION['id']."' OR id > '".$_SESSION['id']."') 

しかし、誰フィールドは、 "ID" を除いてインデックス化されていません。 "id"は "PRIMARY with AUTO_INCREMENT"です。

私のクエリには時間がかかり、「サーバーの最大実行時間が30秒を超えました」などと表示されることがあります。 どうすればよいですか?インデックスを作成せずにクエリを高速化するにはどうすればよいですか?私は共有ホストのApacheサーバーにいます。

+0

* memberdata *テーブルの構造を教えてください。 – wisefish

+1

少なくとも「シニア」にインデックスを追加する必要があります。それ以外の場合、テーブルのフルスキャンは100%発生します。 –

+0

63列のテーブルは展開するのに適していないようです。彼はあなたのテーブルデザインを囲むことができます。 – ajreal

答えて

8

なぜインデックスを追加したくないのですか?あなたは常に物事を固定するためにいくつかのトリックを行うことができますが、は決してはインデックスと同じくらい速くなります。

実際の回答に答えるには、SELECT/WHERE句の不要なフィールドを削除してデータベース内の検索を絞り込むことができます。または、大きなものの代わりに小さなクエリをたくさん試してみてください...いくつかのソリューションを試してから、ベンチマークを行ってセットアップに最適なものを選択する必要があります。

しかし、インデックスを追加する方が簡単で高速です(ただし、悪いデータベースデザインや悪いアプリケーションは魔法のように修正されません)。

+0

私は彼らがストレージスペースについて緊張していると思っています。しかし、私は同意する、インデックス作成は行く方法です。 – Poodlehat

+0

また、多くのレコードの書き込みは頻繁ではないので、インデックス構築は問題ではありません。 –

+0

インデックス作成が役に立ちます。しかしMLMプロジェクトでは、1人のシニアが100人のダウンラインになる可能性があります。シニアフィールドでは、プライマリまたはユニークなインデックスを追加できません。じゃあどうすればいい。また、私は最大10フィールドを残すことができますが、他の53フィールドはプロファイルページに表示する必要があります。私を助けてください。私はデータベース構造を与えることができます。 –

1

すべてのフィールドではなく、必要なフィールドを選択してみませんか?自動増分するフィールドは必要ありません。あなたが検索から外すものが多くなればなるほど、検索がより速くなります。なぜなら、データはそれほど多くないからです。

+0

あなたは通常、*必要な* ID .. –

関連する問題