MySQL - 这两种索引哪个更好?

3
我有一个拥有240万条目的数据库网站。现在我想使用mod_rewrite来生成清晰的URL,例如example.com/this-is-a-beautiful-url。为了识别哪个网址属于哪个页面,我想建立一个URL表,它可以引用网站的内容。比如,“this-url-example”对应着ID为123的文章。 现在有两个朋友给了我两种不同的建表方法,我不知道哪种方法最好。
  1. 建议:“对URL进行MD5哈希并将其保存在二进制字段中,并建立索引。”
  2. 建议:“简单地将URL保存为纯文本,并加上索引。”
哪种方法可以提供更快的查询速度?你有其他建议吗?谢谢!
3个回答

2

采用妥协方案,将url设置为sitename.com/12345/clean-url-format

这样你就可以在易读的URL中同时包含关键词和标识符,而且还可以使用标识符来获取主键以提高速度。

如果没有文本部分的url,重定向到带有文本部分的规范版本是合理的。


谢谢您的建议。但是,将ID放在URL中对于SEO并没有好处。 - Crayl
它将会 a) 绝对没有任何负面影响 b) 解决文本字段查找的性能问题 - vvondra
@Crayl - 为什么这对SEO没有好处?只要您不混淆ID和slug,那就没问题了。 - joar

2

MD5哈希是为数据比较目的而设计的。例如,检查密码是否有效或文件是否未更改。

如果您计划能够更改和修改URL(用于搜索引擎优化),我建议使用纯文本。

此外,如果您想创建Mod Rewrite命令(在HTACCESS文件中)-它需要是纯文本,以便您将该URL链接到特定页面。


使用MD5哈希的方法是在页面请求时散列slug,然后通过哈希值在数据库中查询。提到的另一种替代方法是直接通过slug进行查询。 - joar

0
我不会使用mysql或md5哈希。相反,使用键值存储,例如dbmleveldb。如果您正在使用Apache的mod_rewrite,它有一个功能RewriteMap,可以直接从dbm db读取键和值,或通过调用外部程序来实现。类型可以是sdbmgdbmndbmdbBerkeley DB),apache包括一个程序httxt2dbm,用于创建数据库。如果您确实想使用MySQL,则RewriteMap也可以使用dbd选项和mod_dbd。就性能而言,在MySQL上使用哈希索引应该与Berkley DB类似。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接