私が正しく理解している場合、プライマリ列でUUIDを使用していますか?通常の(整数の)主キーの方が高速であると言われますが、MySQLのダークサイドを使用する別の方法があります。実際、MySQLは、インデックスが必要な場合、他の何よりもバイナリを使用する方が高速です。
UUIDは128ビットであり、16進数で記述されているため、UUIDの高速化と保存は非常に簡単です。
まず、プログラミング言語でダッシュを削除します
110E8400-E29B-11D4-A716-446655440000
から 110E8400E29B11D4A716446655440000
へ 。
現在は32文字です(MD5ハッシュのように、これも機能します)。
単一のBINARY
MySQLでは8ビットのサイズで、BINARY(16)
はUUIDのサイズです(8 * 16 =128)。
次を使用して挿入できます:
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
とクエリを使用して:
SELECT HEX(FieldBin) AS FieldBin FROM Table
プログラミング言語で、元のUUIDと一致するように、位置9、14、19、および24にダッシュを再挿入します。位置が常に異なる場合は、その情報を2番目のフィールドに保存できます。
完全な例:
CREATE TABLE `test_table` (
`field_binary` BINARY( 16 ) NULL ,
PRIMARY KEY ( `field_binary` )
) ENGINE = INNODB ;
INSERT INTO `test_table` (
`field_binary`
)
VALUES (
UNHEX( '110E8400E29B11D4A716446655440000' )
);
SELECT HEX(field_binary) AS field_binary FROM `test_table`
この手法を任意の16進文字列で使用する場合は、常にlength / 2
を実行してください。 フィールドの長さ。したがって、sha512の場合、フィールドはBINARY (64)
になります。 sha512エンコーディングは128文字の長さなので。