|
|
1
16
您需要一个自动递增的数字主键。当您需要传递id或连接其他表(例如,URL的可选属性)时,您需要一些小的数字。
我想补充一点,使用MySQL的内置MD5()函数就可以了。它唯一的缺点是,一个专门的攻击者可以强制碰撞,我敢肯定你不在乎。例如,使用内置函数可以使某些类型的连接更容易。通过网络传递完整的URL可能会稍微慢一点(“SELECT URL FROM URL WHERE hash=MD5('verylongurl')”而不是“WHERE hash='32charhexstring'”),但是如果您愿意,您可以选择这样做。除非你能想出一个具体的场景,MD5()会让你失望,否则你可以随意使用它。 困难的问题是,您是否需要以及如何需要以非全文的方式查找URL:例如,您是否希望在任何URL上查找以“/foo”开头的所有URL酒吧网站“主持人?而“喜欢”%酒吧网站%/foo%'将在测试工作,它将失败惨重的规模。如果您的需要包括这样的内容,您可以想出创造性的方法来生成针对您需要的数据类型的非唯一索引。。。也许是一个域名栏,对初学者来说。几乎可以肯定的是,您必须从应用程序中填充这些列(触发器和存储过程的麻烦比它们在这里的价值要大得多,特别是如果您关心性能的话——不用麻烦)。 好消息是,关系数据库对于这类事情非常灵活。您可以随时添加新列并在以后填充它们。我建议初学者:int unsigned auto\u increment主键、惟一散列字符(32)和(假设64K字符足够)文本url。 |
|
|
2
2
大概你说的是一个完整的URL,而不仅仅是一个主机名,包括CGI参数和其他东西。 SHA-1散列url使得所有的键都很长,并且使得排序问题变得相当模糊。我曾经不得不使用哈希表上的索引来隐藏一些机密数据,同时保持连接两个表的能力,性能很差。
但如果你有很多网址集中在几个领域。。。例如。。。。
等等,你看到的索引只在最后一个字符中变化。在这种情况下,您可以考虑存储和索引url,并反转其字符顺序。这可能导致更有效地访问索引。 (Oracle table server产品有一种内置的方法,即所谓的反向索引)
如果我是你,我会避免使用自动递增键,除非你必须连接两个以上的表
|
|
3
1
取决于你如何使用桌子。如果你选择
|