大規模な Web アプリケーションでは、データベースの最適化は、システムの高いパフォーマンスを確保するための重要なリンクの 1 つです。現在最も人気のあるオープン ソース データベースの 1 つである MySQL は、多くの最適化手法を提供しており、その中でもパーティション テーブルがよく使用される手法です。パーティション テーブルは、特定の条件に従って大きなテーブルを複数のサブテーブルに分割します。これにより、クエリの効率とデータの追加、削除、変更の速度が大幅に向上します。
PHP プログラミングでは、次の 2 つの方法で MySQL パーティション テーブルを最適化できます。
次のことができます。 SQL クエリ ステートメントでパーティション テーブルを直接使用して、最適化効果を実現します。たとえば、ユーザーの注文レコードをクエリする場合、SQL ステートメントを次のように記述できます。
SELECT * FROM orders WHERE user_id = 100 AND create_time > '2021-01-01' AND create_time < '2022-01-01';
orders テーブルが非常に大きい場合は、create_time フィールドに従ってテーブルを分割できます。まず、月ごとにパーティション化された注文テーブルを作成します。
CREATE TABLE orders ( id INT NOT NULL AUTO_INCREMENT, user_id INT, order_time DATETIME, amount DECIMAL(10,2), PRIMARY KEY (id, order_time) ) PARTITION BY RANGE (TO_DAYS(order_time)) ( PARTITION p202101 VALUES LESS THAN (TO_DAYS('2021-02-01')), PARTITION p202102 VALUES LESS THAN (TO_DAYS('2021-03-01')), PARTITION p202103 VALUES LESS THAN (TO_DAYS('2021-04-01')), ... PARTITION p202112 VALUES LESS THAN (TO_DAYS('2022-01-01')) );
このようにして、注文をクエリするときに、user_id と create_time 条件に基づいてクエリを実行でき、MySQL は対応するパーティションを自動的に選択してクエリ効率を向上させます。
ORM フレームワークは、オブジェクトとデータベース テーブルを自動的にマップするツールです。ORM フレームワークを使用してパーティション テーブルを自動化できます。たとえば、Yii2 フレームワークを使用する場合、yii2-partition 拡張パッケージを使用してテーブルを自動的に分割できます。パーティション テーブルを最適化するには、パーティション テーブルを構成するだけです。
まず、Yii2 フレームワークの設定ファイルにパーティション テーブルの設定を追加する必要があります。
return [ // ... 'components' => [ 'db' => [ 'class' => 'yiidbConnection', 'dsn' => 'mysql:host=localhost;dbname=mydatabase', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8mb4', 'enableSchemaCache' => true, 'schemaCacheDuration' => 3600, 'partitioning' => [ 'userName' => [ 'type' => 'RANGE', 'expression' => 'MONTH(create_time)', 'column' => 'user_id', 'partitionConfig' => [ 'type' => 'RANGE', 'expression' => 'MONTH(create_time)', 'partitionCount' => 12, 'lowerBound' => 1, 'upperBound' => 12, ], ], ], // ... ], ], // ... ];
その中で、パーティショニング設定項目を通じてパーティション テーブルを設定します。ここでは例として userName を取り上げ、RANGE パーティション タイプを使用し、MONTH (create_time) フィールドに従ってパーティション化し、12 のサブテーブルに分割します。
次に、対応する Model クラスでパーティション テーブルを指定する必要があります。
class Order extends yiidbActiveRecord { public static function tableName() { return '{{%order}}_userName'; } // ... }
これにより、オーダーを操作する際にパーティション テーブルを自動的に使用してパフォーマンスを向上させることができます。
概要
PHP プログラミングでは、SQL ステートメント内でパーティション テーブルを直接使用するか、ORM フレームワークを使用してパーティション テーブルを自動化し、MySQL パーティション テーブルを最適化し、システム パフォーマンスを向上させることができます。特定のアプリケーションでは、特定の状況に応じて適切な方法を選択し、実際の状況に応じて調整および最適化する必要があります。
以上がMySQL パーティション テーブルの最適化: PHP プログラミングでの応用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。