金利0無利息キャッシング – キャッシングできます

2009-03-11

URLを扱うテーブルを作るときにどうすべきか

15:01 | URLを扱うテーブルを作るときにどうすべきか - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - URLを扱うテーブルを作るときにどうすべきか - 金利0無利息キャッシング – キャッシングできます

  • MySQL4ではVARCHARの長さが255が上限だったので、もっぱらvarchar(255)を使っていた。
  • ある事件をきっかけにURLは大文字小文字を判別すべきだという認識が広まり、varbinary(255)が使われるようになった。
  • しかし、255文字以上のURLが保存できない。
    • URLの後ろが切られる。
    • uniq制約をかけている場合、255bytes以降の文字列が異なるURLが納できなくなる。

別カラム作る

何かの方法で圧縮する

  • pathtraqの事例を詳しく知りたい。

別テーブル参照する

  • 既存テーブルはurlのみ変更無し、別テーブルにdigest2text。
  • URLの長さが一定以上だったら、md5:xxxxxxxxみたいな形式に変換してしまう。
  • digest2textの変換テーブルを使ってアプリ側で変換。
  • 全一致の検索しかできない。

単純に長さを増やす

  • FriendFeedの例では、link VARCHAR(735) NOT NULLとなっている。
  • InnoDBインデックスの長さ制限が767bytesなので、他のカラムとの複合インデックスを作った場合を考えて、それより短くしているようだ。
  • 735bytes以上のURLを格納できない。