sql >> データベース >  >> RDS >> Mysql

wp_postmetaへの参照が非常に遅いのはなぜですか?

    wp_postmetaの標準スキーマ 貧弱なインデックスを提供します。これはパフォーマンスの問題につながります。

    スキーマをこれに変更することで、メタデータへのほとんどの参照が高速になります:

    CREATE TABLE wp_postmeta (
        post_id …,
        meta_key …,
        meta_value …,
        PRIMARY KEY(post_id, meta_key),
        INDEX(meta_key)
    ) ENGINE=InnoDB;
    

    注:

    • 現在のAUTO_INCREMENT 列はスペースの無駄であり、PRIMARY KEYであるため、クエリの速度が低下します。 、これにより、(post_id, meta_key)の「自然な」「複合」PKを回避します。 。
    • InnoDBは、「クラスタリング」により、そのPKのパフォーマンスをさらに向上させます。 (まだMyISAMを使用していないことを願っています!)
    • MySQL 5.6(またはMariaDB 10.0または10.1)を使用している場合は、meta_keyを変更します。 VARCHAR(255)から 、VARCHAR(191)ではありません 。 (191が十分でない場合は、別の質問で理由と回避策について説明できます。)
    • INDEX(meta_key) オプションですが、「特定のキーを持つ投稿を検索する」場合に必要です。
    • 警告:これらの変更により、多くの速度が向上します。 postmetaの使用ですが、すべてではありません。私は考えない ユースケースが遅くなります。 (このようなクエリが発生した場合は、提供してください。実際の劣化ではなく、キャッシュの問題である可能性があります。)

    あなたのを提示したい場合 CREATE TABLEALTERを提供できます これに変換します。

    1つの投稿に同じキー名を持つ複数のメタキーを使用する機能が必要な場合は、このソリューションを使用してください。上記の提案とほぼ同じです。

        meta_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,  -- keep after all
        ...
        PRIMARY KEY(post_id, meta_key, meta_id),  -- to allow dup meta_key for a post
    

    ソースドキュメント

    可能なALTER

    警告:

    • これをテストする方法がありません。
    • これは767エラーに対処していません
    • これにより、meta_idが保持されます 一部のWPユーザーが、他のテーブルから参照されていると指摘したためです。
    • (post_id、meta_key)コンボに複数の行がある可能性があることを前提としています。 (これは不十分なスキーマ設計のように思われますか?)
    • これは、一般的なSELECTsを高速化することだけです。 postmetaを含む。
    • これはおそらくwoocommerceにも当てはまります。
    • これを使用する場合は、データベースをダンプして、問題が発生した場合に備えてリロードする準備をしてください。

    SQL:

    ALTER TABLE wp_postmeta
        DROP PRIMARY KEY,
        DROP INDEX post_id,
        ADD PRIMARY KEY(post_id, meta_key, meta_id),  -- to allow dup meta_key for a post
        ADD INDEX(meta_id);    -- to keep AUTO_INCREMENT happy
    



    1. MySQLは、2つの日付範囲が入力と重複していないかどうかを確認します

    2. SQL Serverでデータアクセスが有効になっているかどうかを確認する2つの方法(T-SQLの例)

    3. jdbcの外部キーの問題

    4. postgresqlデータベースの所有者がデータベースにアクセスできません-リレーションが見つかりません。