1

データベーステーブルの主キー (たとえば、user_id が PK であるユーザー) を int または char(32) にすることでパフォーマンスに違いはありますか?

MySQLとSQLiteの場合、これは疑問に思っています。

int は 1、2、3、... の自動インクリメントで、char(32) は一意の 32 文字の英数字です。

4

2 に答える 2

1

テーブル自体がインデックス順に格納されている場合、インデックスはより効率的です。これは、レコードを検索するためにインデックスで 2 次ルックアップを実行する必要がないためです。これは通常、「索引構成表」または「クラスタ化索引」と呼ばれます。

SQLite では、クラスター化インデックスを取得するには、PK をINTEGER PRIMARY KEYとして宣言する必要があります。

MySQL はクラスター化インデックスの両方のデータ型をサポートします。唯一の違いは、char(32)より多くのスペースを占有することであり、これにはより多くの I/O が必要になる場合があります。

于 2013-10-06T11:56:18.513 に答える
1

まず第一に、SQLite についてはわかりませんが、MySQL についてはPK として使用INTすることをお勧めします。CHAR(32)これは、MySQL が列のインデックスを構築する方法に関係しているため、PK の文字列よりも常に整数の方が適しています。

もう 1 つのことは、32 ビットの長さしかないCHAR(32)場所で、より多くのスペース (32 バイト = 256 ビット) を消費することです。INT(10)つまり、CHAR(32)フィールドにはフィールドよりもはるかに異なるキーがありINT(10)ます。

于 2013-10-06T09:30:52.153 に答える