最大速度のために最適化する必要があるデータベースを設計しています。
すべてのデータベース データは、入力データベース (編集中のデータ、主に Google マップのポリライン、マーカーなどを保持するもの) と呼ばれるものから一度生成されます。
そのため、データベースは編集の対象ではありませんが、ユーザーに結果をすばやく表示するために、できるだけ多くのデータを保持する必要があります (街中のルート、カスタム ポリラインなど)。
問題は、int よりも smallint のような小さいデータ型を選択すると、パフォーマンスが向上するか、またはパフォーマンスに影響するかということです。スペースはそれほど問題ではありません。いくつかの簡単な計算の後、データベースは 200 MB を超えず、100.000 行を超えるテーブルはありません (平均は約 5.000 になります)。
私がこれを尋ねているのは、インターネットでいくつかの記事を読み、小さなデータ型がパフォーマンスを向上させると言う人もいれば、追加の処理を行う必要があるためにパフォーマンスに影響を与えると言う人もいるからです。小規模なデータベースの場合、おそらく結果が目立たないことは承知していますが、より多くのクエリをトリガーする多くのリクエストが予想されるため、あらゆる点に関心があります。
ホスティング環境は、SQL Server 2008 R2 を搭載した Windows Server 2008 R2 になります。
編集 1:私はまだ適切なテーブル構造を持っていないので、例を挙げてみましょう: 公共交通機関の路線 (約 200) を保持するテーブルを用意します。これは、実際には一意の番号で識別されます。これはあらゆる種類のテーブルで参照され、あらゆる種類の操作が行われます。これらの参照テーブルには、最大量のデータが保持されます。
線には固有の番号があるため、3 つのデザイン例を考えました。
PK はデータ型の行番号です: smallint
PK はデータ型の行番号です: int
PK は別のもの (ID など) であり、行番号は別のフィールドに格納されます。
議論のために、最適化の対象ではない「入力データベース」でこれを使用したため、PK は GUID (16 バイト) です。必要に応じて、これが他のものと比べてどれほど悪いかを比較することができます。
したがって、PK は少なくとも 15 のテーブルで参照されることに注意してください。そのうちのいくつかは 50.000 を超える行 (上で述べたように残りの平均は 5.000) を持ち、これらは常にクエリと操作の対象となります。私が得ることができるすべての速度に興味があります。
必要に応じて、これをさらに詳しく説明できます。ありがとう
編集2:そして、これに関連する別の質問が頭に浮かびました。それはこの議論に当てはまると思います:
LINQ to SQL を使用するのではなく、.NET アプリケーション内からネイティブ SQL クエリを使用すると、この特定のシナリオでパフォーマンスが向上しますか? LINQ が強力に最適化されており、パフォーマンスに関して非常に優れたクエリを生成することは知っていますが、それでも、質問する価値は確かにあります。再度、感謝します。