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

SQL Serverはどのカーディナリティーでインデックススキャンに切り替えますか(シークに対して)

    SQL Serverの観点からは、これは転換点と呼ばれ、キンバリーのブログ投稿をよく読んでいます。 http://www.sqlskills.com/BLOGS/KIMBERLY /category/The-Tipping-Point.aspx

    転換点は、テーブル内の総ページ数の25%〜33%のガイドラインであり、行として表されます。 10kのデータページでは、2500〜3333行の転換点が得られます。ガイドラインが進むにつれ、これは非常に優れており、得られる限り優れています。クエリプランエンジンはブラックボックスであり、クエリプランは提供されますが、決定された内容のみが示され、理由は示されません。

    ただし、カバーリングインデックスのチップに関しては、実際にはそれほど簡単ではありません。データの100%が選択されていても、ほとんどの場合、カバーリングインデックスはオーバースキャンをシークします。

    つまり、コストオプティマイザが実際のコストをインデックスページ階層に割り当てないことを考慮すると、インデックスのリーフページへのアクセスにコストがかかるだけです。その時点で、カバーリングインデックスの100%をスキャンまたはシークするのに同じ費用がかかります。

    私は自分の実験から見つけました( http: //sqlfascination.com/2009/11/07/can-a-covering-nc-index-be-tipped )between句を使用するとスキャンされますが、他のwhere句ではスキャンされません-私が知る限り、それは純粋にクエリエンジンを経由するルートまででした。



    1. データベースのソートの時間計算量

    2. アレイはjOOQとPostgreSQLで最適化されていますか?

    3. SQL Server 2016:データの挿入

    4. mysqliで自動インクリメントとしてidを持つデータを挿入する適切な方法