在开发中有一个Web应用程序;要求是提供搜索由PK/FK连接表相关的主表中重要领域以及其他领域网络应用中多个字段的搜索策略
架构是这样的
PROJECTS
projectID
projectTitle
projectTown
projectCountryID (FK to countries table)
agencyID (FK to agencies table)
COUNTRIES
countryID
countryName
AGENCIES
agencyID
agencyName
TAGS_PROJECTS (many-many relationship between tags and projects)
id
projectID
tagID
TAGS
tagID
tagName
,因此用户输入搜索词单一搜索领域并且我们想要查看它是否发生在projects.projectTitle,projects.projectTown,countries.countryName,agencies.agencyName或tags.tagName中,用于分配给项目的任何标记
数据集将随着时间的推移而增长项目表中的10,000-50,000行的顺序,以及其他表中的000的顺序
我打算建立一个测试平台并运行不同方法的测试,但我想知道是否有人曾经处理类似的情况,并有任何建议提供?
我正在考虑,将测试的方法分别是:
单个查询 我想这将有可能写一个SQL查询来进行搜索,但是这样的查询可能会不小心优化表现不佳一旦数据增长到全尺寸。问题是我不会在项目启动后参与,所以不会有完整的,真实的数据进行实验
多个查询 由于网站和数据库将轻微加载,一些小的查询可能会在代码最简单快捷。将发出几个SQL查询,然后将每个搜索的结果集合并到PHP中。
冗余搜索表 当我编辑项目时,我正在考虑将一行作为手工索引编写到另一个表中 - 这将从标记,国家,机构等相关字段的文本值中将它们连接成一个字符串并使用projectID将其粘贴到搜索表中;每个项目的项目表中都会有一行,基本上代表我们可以搜索的关键数据的非规范化视图。
我已经看了一下使用MySQL的一些看法,但是对这些缺乏索引感到紧张;至少冗余搜索表可以仔细索引
技术手 - PHP 5.1.6和MySQL 5.0.22在RHEL5
运行的任何想法,意见或战争的故事欢迎
感谢您的时间
伊恩
嗨Yanick,谢谢你。每次填充临时表有什么好处,这将需要我执行所有昂贵的连接,我试图避免,每次运行查询时?如果我想使用MyISAM的FULLTEXT功能,为什么不维护一个单独的MyISAM表?谢谢,Ian – Polsonby 2010-09-03 07:59:32
@Flubba,JOIN语句并不昂贵,至少比FROM多个表更便宜...无论如何,是的,您可以使用AFTER INSERT/UPDATE/DELETE触发器维护单独的MyISAM表,或者您可以使用第三方搜索并在延迟的时间段后运行索引器。在任何情况下,维护独立的启用FULLTEXT的表格都不应该由您的项目本身完成,因此,如果您需要更改技术,您将无法完成搜索。 – 2010-09-03 19:24:32
有趣的想法,欢呼声。 .. – Polsonby 2010-09-06 08:47:45