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

mysqlデータベースのすべての列にインデックスを付けるのは正しいですか?

    いいえ、すべての列にインデックスを付けるわけではありません。 WHEREに特に関係する列にインデックスを付けます 句、および場合によってはORDER BYに関与している場合 。

    この場合、typeのインデックスが必要になります :

    SELECT name FROM users WHERE type='admin'
    

    この場合、active,typeのインデックスが必要になります :

    SELECT name FROM users WHERE type='admin' AND active=1
    

    この場合、active,type,nameのインデックスが必要になる場合があります :

    SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
    

    追加するインデックスが多いほど書き込みは遅くなりますが、読み取りは速くなります。これは古典的なトレードオフです。必要なインデックスを注意深く評価し、具体的なメリットがある場合にのみ適用してください。彼らがそこにいるはずだと感じているからといって、彼らを平手打ちするだけではいけません。

    1000行未満の非常に小さなテーブルでは、テーブルスキャンにそれほど時間がかからないため、インデックスはそれほど役に立ちません。些細なことではありませんが、絶対に必要です。

    パフォーマンスの問題が発生している場合は、インデックスの不足ではなく、スキーマが最大の障害であることをお勧めします。



    1. Mysql select recursiveは、複数のレベルを持つすべての子を取得します

    2. mysql2gemのインストールが失敗する

    3. 各グループ/パーティションのMySQL高密度ランク

    4. パラメータとしてNULLをストアドプロシージャSQLServerに制限するにはどうすればよいですか?