我正在尝试为一个网站编写搜索功能,我决定使用MySQL临时表来处理数据输入,通过以下查询方式:
CREATE TEMPORARY TABLE `patternmatch`
(`pattern` VARCHAR(".strlen($queryLengthHere)."))
INSERT INTO `patternmatch` VALUES ".$someValues
当 $someValues
是一个具有布局 ('some', 'search', 'query')
的数据集时,也就是用户搜索的内容。然后我基于patternmatch
表中的数据在我的主表images
中进行搜索,方法如下:
SELECT images.* FROM images JOIN patternmatch ON (images.name LIKE patternmatch.pattern)
我随后会运用一种基于搜索结果与输入匹配程度的启发式或评分系统,并根据该启发式等方式展示结果。
我想知道创建临时表需要多少开销?我知道它们只存在于会话中,并在会话结束时被删除,但如果我每秒有数十万次搜索,我可能会遇到什么样的性能问题?有没有更好的实现搜索功能的方法?
images
的常规表已经被正确地设置和索引了,其中包含了所有可能的结果。我想问的是,是否使用一个特定于会话的临时表来处理用户输入的搜索(在搜索时创建,在会话结束时删除)是处理搜索功能的适当方式。 - marked-down