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

条件なしですべてを選択する際の高価な全表スキャン

    詳細については、以下のリンクを参照してください

    https://dev.mysql.com/doc /refman/8.0/en/table-scan-avoidance.html

    全表スキャンの原因は以下のとおりです

    • テーブルは非常に小さいため、キールックアップを気にするよりもテーブルスキャンを実行する方が高速です。これは、行が10行未満で、行の長さが短いテーブルで一般的です。

    • インデックス付き列のON句またはWHERE句に使用可能な制限はありません。

    • インデックス付きの列を定数値と比較していて、MySQLは(インデックスツリーに基づいて)定数がテーブルの非常に大きな部分をカバーし、テーブルスキャンが高速になると計算しました

    • 別の列でカーディナリティの低いキー(多くの行がキー値と一致する)を使用しています。この場合、MySQLは、キーを使用することで多くのキールックアップを実行し、テーブルスキャンが高速になると想定しています。

    以下の全表スキャンの使用を避けるために:

    • ANALYZE TABLE tbl_nameを使用して、スキャンされたテーブルのキー分布を更新します。

    • スキャンされたテーブルにFORCEINDEXを使用して、指定されたインデックスを使用する場合に比べてテーブルスキャンのコストが非常に高いことをMySQLに通知します。

      例えばSELECT * FROM t1、t2 FORCE INDEX(index_for_column)WHERE t1.col_name =t2.col_name;




    1. Oracleに対するJavaのPreparedStatementの質問

    2. MySQLクイックヒント:DAYOFWEEK関数の使用

    3. 10進数のデータ型(MySQL / Postgres)を使用するとパフォーマンスが低下しますか?

    4. ユーザーに関連するカテゴリごとの値を取得するにはどうすればよいですか?