データベーステーブルの主キー (たとえば、user_id が PK であるユーザー) を int または char(32) にすることでパフォーマンスに違いはありますか?
MySQLとSQLiteの場合、これは疑問に思っています。
int は 1、2、3、... の自動インクリメントで、char(32) は一意の 32 文字の英数字です。
データベーステーブルの主キー (たとえば、user_id が PK であるユーザー) を int または char(32) にすることでパフォーマンスに違いはありますか?
MySQLとSQLiteの場合、これは疑問に思っています。
int は 1、2、3、... の自動インクリメントで、char(32) は一意の 32 文字の英数字です。
テーブル自体がインデックス順に格納されている場合、インデックスはより効率的です。これは、レコードを検索するためにインデックスで 2 次ルックアップを実行する必要がないためです。これは通常、「索引構成表」または「クラスタ化索引」と呼ばれます。
SQLite では、クラスター化インデックスを取得するには、PK をINTEGER PRIMARY KEYとして宣言する必要があります。
MySQL はクラスター化インデックスの両方のデータ型をサポートします。唯一の違いは、char(32)
より多くのスペースを占有することであり、これにはより多くの I/O が必要になる場合があります。
まず第一に、SQLite についてはわかりませんが、MySQL についてはPK として使用INT
することをお勧めします。CHAR(32)
これは、MySQL が列のインデックスを構築する方法に関係しているため、PK の文字列よりも常に整数の方が適しています。
もう 1 つのことは、32 ビットの長さしかないCHAR(32)
場所で、より多くのスペース (32 バイト = 256 ビット) を消費することです。INT(10)
つまり、CHAR(32)
フィールドにはフィールドよりもはるかに異なるキーがありINT(10)
ます。