sql >> データベース >  >> RDS >> Mysql

MySQL:インデックスを作成するには長すぎる列に対する効率的なクエリ

    本当の問題はおそらくVARCHARを使用することです 指紋列用。 utf8文字エンコードを使用する場合、MySQLは「最悪のシナリオ」を適用し、文字ごとに3バイトをカウントします。

    これを1バイトエンコーディング(Latin1など)に変更するか、VARBINARYを使用します 代わりに入力してください:

    create table fingerprinted_entry 
    ( type varchar (128) not null, 
      fingerprint varbinary (512) not null,
      PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
    

    プレフィックスあたり767バイトの制限を超える必要がある場合は、明示的にする必要があります。 インデックスを作成するときは、次のように述べてください。

    create table fingerprinted_entry 
    ( type varchar (128) not null, 
      fingerprint varbinary (2048) not null,              -- 2048 bytes
      PRIMARY KEY(type, fingerprint(767))) ENGINE InnoDB; -- only the first 767 bytes of fingerprint are stored in the index
    


    1. 過去30日間のレコードを取得する方法

    2. 過去x秒間にmySQLレコードが追加されたかどうかを確認します

    3. GROUPBYからJOINへの変換のためのORDERBYサブクエリ

    4. ユーザー登録時にサブドメインを自動作成すると、新しいWebサイトが作成されますか、それともWebサイトの外観が表示されますか?