在Mysql中存储URL的最有效方法?

13 mysql

我想在MySql中存储大量URL并在列上创建唯一索引.如果我将列设为utf8,那么我将仅限于varchar(333),这不足以容纳我的一些URL.如果我声明列是latin1然后我得到完整的1000个字符(不要认为我需要那么多).但是,我必须对URL进行编码,并且始终使用编码的URL保持一致.有没有更好的方法来管理大量的URL?

lon*_*eck 9

三个好方法:

1)使用TEXT而不是VARCHAR.为了确保唯一性,您还必须创建一个单独的VARCHAR列来存储MD5()或SHA1()哈希并添加UNIQUE或PRIMARY索引.这有一个额外的磁盘寻求检索URL的不幸后果,但取决于您的用例可能没问题.

2)使用带有二进制排序规则的VARCHAR并使用COMPRESS()压缩URL.

3)我忘记了第三个,因为我正在输入前两个.GRR ...


RC.*_*RC. 5

您可以考虑的一件事是将URL的主机名和协议部分存储在单独的表中并通过密钥引用它.这也可以在以后用于获取特定主机的所有URL以及帮助解决字符串长度问题.

例如:

PROTOCOLS
-----------------------
PROTOCOL_ID   INTEGER
PROTOCOL      VARCHAR(10)    (i.e., http, https, ftp, etc.)

HOSTS
-----------------------
id       BIGINT
hostname varchar(256)   

URL
-----------------------
PROTOCOL      INTEGER  FK to PROTOCOLS
HOSTNAME      BIGINT   FK to HOSTS
QUERY_STRING  VARCHAR(333)
Run Code Online (Sandbox Code Playgroud)