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

MySQLでは、fooにインデックスが付けられている場合、SELECT fooを配置するとパフォーマンスが向上しますか?

    最初に注意する必要があるのは、MySQLはpsuedo-SELECT(ステートメントではない)ごとに1つのインデックスのみを使用することです。EXPLAINを使用してSELECTの出力を表示すると、どのインデックスが選択されたかがわかります。 EXPLAINはSELECTSでのみ実行できるため、SELECTの構文を交換するときは、DELETE/UPDATEが同じプランを使用していると想定する必要があります...

    私の知る限り、ほとんどのデータベース(埋め込まれているデータベースは奇妙な場合があります)は、次の句でのインデックスの使用をサポートしています。

    • SELECT
    • JOIN(ANSI-92構文)
    • 場所(ANSI-89の両方があるため ここでのフィルタリング)
    • HAVING(WHEREと同等ですが、WHEREとは異なり、サブクエリを必要とせずに集計を使用できます)
    • 注文者

    私はGROUPBYを100%使用しているわけではないので、当面は省略します。

    最終的には、アルゴリズムと手元にある統計に基づいて、何を使用するかをオプティマイザーが選択します。 ANALYZETABLE構文 を使用できます。 統計を更新します(定期的に、常にではありません)。

    補遺

    MySQLは、インデックスを割り当てるためのスペースの量も制限します- 1,000 MyISAMテーブルの場合はバイト、InnoDBテーブルの場合は767バイト 。 MySQLはpsuedo-SELECTごとに1つのインデックスしか使用しないため、インデックス(複数の列を含むインデックス)をカバーすることは良い考えですが、最も一般的なクエリをテストし、可能な限り最適化することになります。インデックス作成の優先順位は次のとおりです。

    1. 主キー(v5のどこかで、pkのインデックス作成が自動化されました)
    2. 外部キー(次に最も可能性の高いJOIN候補
    3. ろ過基準(スペースがあると仮定)


    1. Postgres/psycopg2-文字列の配列を挿入しています

    2. RESTfullの方法でデータベース列のnullエントリをカウントします

    3. PostgreSQLbytea列の16進数をrのint16/uint16にデコードする方法は?

    4. サブクエリからの行のカウント