【发布时间】:2009-07-08 03:29:22
【问题描述】:
场景
我在销售产品的网站上有一个搜索工具。
该页面是使用 PHP 和 MySQL 构建的,针对将 10 多个表连接在一起的合并视图进行搜索。视图中有大约 12,000 条记录,每条记录有 20 多个字段。
用户可以使用多个 (10-15) 选择菜单搜索符合特定条件的产品。
然后数据库根据产品主键的选择菜单值返回结果。
这一切都很好,而且速度足够快。
问题
但是,在同一页面上,我还包含了一个文本框,以便用户可以手动输入他们正在搜索的内容,而不是使用菜单。
由于用户正在输入实际单词而不是通过菜单选择 PK,因此数据库必须进行单词搜索。
由于缺乏对更好方法的了解,我已将外部标准表中的所有文本值合并到一个大字段中。
然后,文本框会搜索此连接字段中的单词。
同样,这工作正常,但将典型的搜索时间从 0.1 秒更改为 2.0 秒。
为了缩短时间,我已对合并视图使用的表中的所有字段进行了索引,但这根本没有帮助。
问题
由于 Google 可以在 1 秒内为“溢出”一词找到 22,200,000 个页面,而我的数据库仅针对 12,000 条记录搜索一个词需要 2 秒。
如何改进数据库的布局和搜索方式?
【问题讨论】:
-
将您的 Web 应用程序与 Google 进行比较就是将苹果与橙子进行比较。他们甚至不使用传统数据库,而是使用面向列的数据仓库(称为 BigTable)来存储数据。它还分布在数千台服务器上,所以它当然会更快。他们花费了多年的努力来加快查询速度。
-
我当然不希望能与 Google 的力量相媲美。我只是想学习一种比我上面所说的更好的单词搜索方法。