我有一个大型数据库,其中包含> 20,000行。我有两个表歌曲和专辑:
表歌曲包含 songid,albumid,songname 和表相册包含 albumid,albumname
目前,当用户搜索歌曲时,我会在他开始输入后立即给出结果。就像Google Instant。
我正在使用的是:每次用户类型我将查询字符串发送到我的后端php文件,然后我在我的数据库中执行该查询,如下所示:
SELECT * FROM songs, albums WHERE songs.albumid = albums.albumid AND songs.songname LIKE '%{$query_string}%';
但是每次使用数据库查询效率非常低,而且随着我的数据库每天都在增长,它也无法扩展。
因此,我想要相同的功能,但更快,更高效,可扩展。
另外,我不希望它是精确的模式匹配,例如:
假设,如果用户键入“Rihana”而不是“Rihanna”,那么它应该能够提供与蕾哈娜相关的结果。
感谢。
答案 0 :(得分:2)
你应该在前n个字符(例如6)上索引表Songs songname列,以获得更好的查询性能。
仅在键入n个字符后触发查询搜索,例如3(例如,jquery autocomplete具有此选项)
如果性能真的至关重要(听起来像是这样),并且数据量不会消耗过多的常驻内存,您也可以考虑使用内存数据库。
谷歌,顺便说一句,不使用传统的RDBMS来执行其荒谬的快速搜索(不断惊讶......)答案 1 :(得分:1)
答案 2 :(得分:1)
首先,您应该发现MySQL FULLTEXT
搜索支持的速度远远超过您当前的方法。
我怀疑你从这个解决方案中想要的那种速度以及对搜索错误拼写单词的支持,你最好调查一些更有特色的全文搜索引擎。其中包括: