VS2005 (c#) および SQLServerCE ライブラリを使用すると、パフォーマンスに影響を与えることはわかりますが、その理由を正確に答えることはできません。 さらに、実際には、列自体ではなく、その列のデータの長さがパフォーマンスに悪影響を及ぼします。
仕事用のプロジェクトで独自のパフォーマンス テストを行っているときに、同様のシナリオに出くわしました。
table1
c1 NVARCHAR (20)
c2 NVARCHAR (20)
c3 NVARCHAR (20)
c4 NVARCHAR (20)
c5 NVARCHAR (4000) //maximum allowed and fully populated for testing purposes
走れば…
select c1, c2, c3, c4 From table1
...約1560ミリ秒かかります。
2 つのテーブルを作成し、大きな列を引き出して (そして、2 つを関連付けるための外部キーを自然に提供して)、最初のテーブルで同じクエリを実行すると、約 660 ミリ秒かかります。
最後に、他のテストでは、列の数ではなく、各行のデータのサイズであることがわかりました。つまり、5 列、2 文字幅 == 2 列、5 文字幅。また、必ずモバイル デバイスでこれらを実行してください。これらを単体テストすることはできますが、私の PC の処理能力が大幅に向上したため、上記の 1000 ミリ秒近くではなく、10 ~ 20 ミリ秒のタイミング差が見つかりました。
なんで?これはあくまでも推測ですが…
モバイルの世界では、DBMS がまったく同じというわけにはいきません。エンタープライズ データベースではありません。隠れたところで、彼らはまだ OLEDB の「シーク」を行っているに違いありません。
全体として、モバイル空間では、DB を最も「正規化」するのではなく、最も頻繁なユース ケースをサポートするように設計することを学びました。幸運を!