クエリキャッシュ用にクエリを最適化する
ほとんどのMySQLサーバーは、クエリキャッシュを利用できます。これは、パフォーマンスを向上させるための最良の戦略の1つであり、データベースエンジンによって目立たないように処理されます。同じクエリが複数回実行されると、結果はキャッシュから取得されるため、はるかに高速になります。
SELECTクエリを説明する
MySQLがクエリを実行するために何をしているのかを知るには、EXPLAINキーワードを使用します。これは、クエリやその他のデータベースオブジェクトを悩ませている可能性のあるボトルネックやその他の問題を特定するのに役立ちます。
LIMIT1一意の行を取得する場合
テーブルに1行だけをクエリする場合、または特定のWHERE句に一致するレコードが存在する場合は、パフォーマンスを向上させるためにSELECTクエリにLIMIT1を追加することをお勧めします。これは、データベースエンジンが、指定されたデータベースオブジェクト全体をスキャンするのではなく、1つのレコードだけを見つけた後に結果を返すことを意味します。
検索フィールドにインデックスを付ける
テーブルに次の目的で使用する列がある場合 で検索する クエリの場合は、常にインデックスを作成することをお勧めします。
結合に同じ列名をインデックス付けして使用する
また、JOINで使用される列に常にインデックスを付けることもベストプラクティスです。これにより、MySQLがJOIN操作を最適化する方法が大幅に改善されます。また、結合される列が同じデータ型であることを確認してください。それらが異なる種類の場合、MySQLはインデックスの1つを使用できない可能性があります。
すべてを選択しないでください(SELECT *)
テーブルから読み取るデータの量は、クエリの速度に大きく影響します。これは、ディスク操作にかかる時間に影響します。データベースサーバーがネットワーク経由でアクセスされる場合、ネットワーク経由でデータを転送するために必要な時間に影響します。 SELECTを実行するときに必要な列を指定することは、MySQLのベストプラクティスの1つです。
適切なストレージエンジンを選択する
MySQLには2つのメインストレージエンジンがあります。 MyISAMとInnoDB。これらにはそれぞれ長所と短所があります。
MyISAM 読み取りが多いアプリにはお勧めしますが、書き込みが多い場合はパフォーマンスが低下します。データベースオブジェクトは、その単純さに関係なく、操作が実行されるとロックされます。 MyISAMは、多数のSELECT COUNT(*)クエリを実行するときに役立ちます。
InnoDB より洗練されたストレージエンジンになる傾向があります。ただし、多くの小さなアプリケーションでは、MyISAMよりも少し時間がかかる場合があります。ただし、拡張性に優れた行ベースのロックをサポートしています。また、トランザクションなどのより高度な機能も処理できます。
ソース
https://www.fullstackpython.com/blog/install-mysql-ubuntu-1604.html
https://code.tutsplus.com/tutorials/top-20-mysql-best-practices–net-7855