いいえ、すべての列にインデックスを付けるべきではありません。データを書き込むと処理が遅くなります。 CPUが時々200%に達するのは普通ではありません。私はあなたのSQLをチェックすることをお勧めします。
SELECT文を最適化すると便利です。
http://dev.mysql.com/doc/refman/5.6/en/statement-optimization.html
1.Optimizeキャッシュを使用してクエリ。関数の代わりにパラメータを使用してみてください。
(@のtadmanの提案のおかげで)あなたは賢明に選択
// no cache
$sql = "SELECT username FROM user WHERE signup_date >= CURDATE()";
// cache
$today = date("Y-m-d");
$sql = "SELECT username FROM user WHERE signup_date >= '$today'");
2.EXPLAIN。潜在的なパフォーマンスの問題を見つけるのに役立ちます。
EXPLAIN select name,phone from user where name="JakLiao";
3.最初の1行の結果のみが必要な場合は、「LIMIT N」を使用します。
SELECT * FROM user WHERE country = 'China' limit 1;
4. where句で必要なときにインデックスを使用します。
//row "name" should add index.
select * from user where name LIKE 'Jak%' limit 10;
5.テーブルを結合するときにインデックスを使用します。
select company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = 123;
6.避けてください "*を選択し、"
//not suggest
SELECT * FROM user WHERE user_id = 1;
//suggest
SELECT username FROM user WHERE user_id = 1;
7. PROCEDURE(ANALYZE)、MYSQLは、分析データベースとデータをお手伝いします。 8.テーブルの行を知りたいときはCOUNT(1)を指定します。
//not suggest
SELECT count(*) FROM user;
//suggest
SELECT count(1) FROM user;
実際には大きなデータベースとは見なされませんが、私はそれを小さなものと呼んでいます。 – RiggsFolly
不必要なインデックスはリソースの無駄です。しかし、どの索引が最も適切かを判断することは、実行されている実際の照会と、それらの照会のパフォーマンスの期待値に依存します。パフォーマンスチューニングは「インデックス」よりもはるかに多いです。その表のすべての索引が適切である可能性があります。提供された情報から、私たちは「この特定のインデックスセットが最も適切であることを明らかにした*慎重な分析」と「*私はちょうど私が正しいインデックスを持っていないことで燃えた* " – spencer7593
あなたのためにそれを整理するために誰か(私ではない)50ドルを与える – Drew