13 mysql
我想在MySql中存储大量URL并在列上创建唯一索引.如果我将列设为utf8,那么我将仅限于varchar(333),这不足以容纳我的一些URL.如果我声明列是latin1然后我得到完整的1000个字符(不要认为我需要那么多).但是,我必须对URL进行编码,并且始终使用编码的URL保持一致.有没有更好的方法来管理大量的URL?
三个好方法:
1)使用TEXT而不是VARCHAR.为了确保唯一性,您还必须创建一个单独的VARCHAR列来存储MD5()或SHA1()哈希并添加UNIQUE或PRIMARY索引.这有一个额外的磁盘寻求检索URL的不幸后果,但取决于您的用例可能没问题.
2)使用带有二进制排序规则的VARCHAR并使用COMPRESS()压缩URL.
3)我忘记了第三个,因为我正在输入前两个.GRR ...
您可以考虑的一件事是将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)
| 归档时间: |
|
| 查看次数: |
9381 次 |
| 最近记录: |