【发布时间】:2014-01-08 00:00:01
【问题描述】:
使用 PHP,我有一个带有 Actions 表的 MySQL 数据库,用户可以在其中选择将操作分配给其网站中的某些页面。每个此类分配都会产生一个操作行,其中包含(除其他外)唯一的 ActionId 和相应页面的 URL。
稍后,在特定页面的上下文中,我想了解是否有分配给该页面的操作,并获取 (SELECT) 适当的操作行。当时我知道我的页面的URL,所以我可以通过这个比较长的字符串搜索Actions表。我怀疑这不是在数据库中搜索的最佳方式。
我认为更好的方法是使用某种散列方法将我的长 URL 字符串转换为整数,确保没有两个不同的 URL 被转换为同一个整数(加密不是这里的问题)。有这样的PHP函数吗?或者,有没有更好的策略?
注意我已经看到了这个:SQL performance searching for long strings - 但它似乎并没有提出一个可靠的解决方案,除了提到md5(它散列成一个字符串,而不是整数)。
【问题讨论】:
-
为什么不使用页面 ID 作为参考?此外,
VARCHAR不应该花那么长时间来搜索,它是TEXT类型,您应该担心大规模搜索。此外,根据您的数据库的大小,它可以足够快也可以非常慢。 -
如果您的网址是唯一的,您可以在该列上创建一个唯一索引并在该列上进行搜索。
-
一个正确索引的列的搜索速度非常快,几乎与搜索字符串的长度无关。在考虑如此复杂的方案之前,您是否真的尝试过并证明它太慢了?
标签: php mysql string hash integer